diff options
| author | Pavel Dedik <pavel.dedik@kiwi.com> | 2019-10-25 14:22:34 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-10-28 10:32:09 +0100 |
| commit | bcfbb71c63092f4bc0fa5cc3f82ece2c986e3168 (patch) | |
| tree | 9f6f3e3a30819a2dc80a9d5013d15adbafaed26d /django/contrib/postgres/forms/array.py | |
| parent | d95b1ddcbef6ef61229080bab1c166d6ee4a161b (diff) | |
Refs #30907 -- Added SplitArrayField._remove_trailing_nulls() hook.
Diffstat (limited to 'django/contrib/postgres/forms/array.py')
| -rw-r--r-- | django/contrib/postgres/forms/array.py | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/django/contrib/postgres/forms/array.py b/django/contrib/postgres/forms/array.py index 3de1fd86cb..d16a51c2e7 100644 --- a/django/contrib/postgres/forms/array.py +++ b/django/contrib/postgres/forms/array.py @@ -178,6 +178,18 @@ class SplitArrayField(forms.Field): kwargs.setdefault('widget', widget) super().__init__(**kwargs) + def _remove_trailing_nulls(self, values): + index = None + if self.remove_trailing_nulls: + for i, value in reversed(list(enumerate(values))): + if value in self.base_field.empty_values: + index = i + else: + break + if index is not None: + values = values[:index] + return values, index + def to_python(self, value): value = super().to_python(value) return [self.base_field.to_python(item) for item in value] @@ -202,16 +214,9 @@ class SplitArrayField(forms.Field): cleaned_data.append(None) else: errors.append(None) - if self.remove_trailing_nulls: - null_index = None - for i, value in reversed(list(enumerate(cleaned_data))): - if value in self.base_field.empty_values: - null_index = i - else: - break - if null_index is not None: - cleaned_data = cleaned_data[:null_index] - errors = errors[:null_index] + cleaned_data, null_index = self._remove_trailing_nulls(cleaned_data) + if null_index is not None: + errors = errors[:null_index] errors = list(filter(None, errors)) if errors: raise ValidationError(list(chain.from_iterable(errors))) |
