Refs #30907 -- Added SplitArrayField._remove_trailing_nulls() hook.
This commit is contained in:
parent
d95b1ddcbe
commit
bcfbb71c63
|
@ -178,6 +178,18 @@ class SplitArrayField(forms.Field):
|
||||||
kwargs.setdefault('widget', widget)
|
kwargs.setdefault('widget', widget)
|
||||||
super().__init__(**kwargs)
|
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):
|
def to_python(self, value):
|
||||||
value = super().to_python(value)
|
value = super().to_python(value)
|
||||||
return [self.base_field.to_python(item) for item in value]
|
return [self.base_field.to_python(item) for item in value]
|
||||||
|
@ -202,16 +214,9 @@ class SplitArrayField(forms.Field):
|
||||||
cleaned_data.append(None)
|
cleaned_data.append(None)
|
||||||
else:
|
else:
|
||||||
errors.append(None)
|
errors.append(None)
|
||||||
if self.remove_trailing_nulls:
|
cleaned_data, null_index = self._remove_trailing_nulls(cleaned_data)
|
||||||
null_index = None
|
if null_index is not None:
|
||||||
for i, value in reversed(list(enumerate(cleaned_data))):
|
errors = errors[:null_index]
|
||||||
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]
|
|
||||||
errors = list(filter(None, errors))
|
errors = list(filter(None, errors))
|
||||||
if errors:
|
if errors:
|
||||||
raise ValidationError(list(chain.from_iterable(errors)))
|
raise ValidationError(list(chain.from_iterable(errors)))
|
||||||
|
|
Loading…
Reference in New Issue