diff options
author | Simon Charette <charette.s@gmail.com> | 2015-12-01 17:59:58 -0500 |
---|---|---|
committer | Simon Charette <charette.s@gmail.com> | 2015-12-17 20:25:04 -0500 |
commit | 3738e4ac46688a0f13139c0b9058fc81c1aac424 (patch) | |
tree | 37d6d9f541cbc86fd55f9f665240cf17eccbec00 /django/contrib/postgres/forms/array.py | |
parent | 86eccdc8b67728d84440a46e5bf62c78f2eddf6d (diff) | |
download | django-3738e4ac46688a0f13139c0b9058fc81c1aac424.tar.gz |
Fixed #25841 -- Handled base array fields validation errors with params.
Thanks to Trac alias benzid-wael for the report.
Diffstat (limited to 'django/contrib/postgres/forms/array.py')
-rw-r--r-- | django/contrib/postgres/forms/array.py | 69 |
1 files changed, 37 insertions, 32 deletions
diff --git a/django/contrib/postgres/forms/array.py b/django/contrib/postgres/forms/array.py index 4eaae3e295..ea466bc1ea 100644 --- a/django/contrib/postgres/forms/array.py +++ b/django/contrib/postgres/forms/array.py @@ -1,4 +1,5 @@ import copy +from itertools import chain from django import forms from django.contrib.postgres.validators import ( @@ -7,7 +8,9 @@ from django.contrib.postgres.validators import ( from django.core.exceptions import ValidationError from django.utils import six from django.utils.safestring import mark_safe -from django.utils.translation import string_concat, ugettext_lazy as _ +from django.utils.translation import ugettext_lazy as _ + +from ..utils import prefix_validation_error class SimpleArrayField(forms.CharField): @@ -38,16 +41,16 @@ class SimpleArrayField(forms.CharField): items = [] errors = [] values = [] - for i, item in enumerate(items): + for index, item in enumerate(items): try: values.append(self.base_field.to_python(item)) - except ValidationError as e: - for error in e.error_list: - errors.append(ValidationError( - string_concat(self.error_messages['item_invalid'], error.message), - code='item_invalid', - params={'nth': i}, - )) + except ValidationError as error: + errors.append(prefix_validation_error( + error, + prefix=self.error_messages['item_invalid'], + code='item_invalid', + params={'nth': index}, + )) if errors: raise ValidationError(errors) return values @@ -55,32 +58,32 @@ class SimpleArrayField(forms.CharField): def validate(self, value): super(SimpleArrayField, self).validate(value) errors = [] - for i, item in enumerate(value): + for index, item in enumerate(value): try: self.base_field.validate(item) - except ValidationError as e: - for error in e.error_list: - errors.append(ValidationError( - string_concat(self.error_messages['item_invalid'], error.message), - code='item_invalid', - params={'nth': i}, - )) + except ValidationError as error: + errors.append(prefix_validation_error( + error, + prefix=self.error_messages['item_invalid'], + code='item_invalid', + params={'nth': index}, + )) if errors: raise ValidationError(errors) def run_validators(self, value): super(SimpleArrayField, self).run_validators(value) errors = [] - for i, item in enumerate(value): + for index, item in enumerate(value): try: self.base_field.run_validators(item) - except ValidationError as e: - for error in e.error_list: - errors.append(ValidationError( - string_concat(self.error_messages['item_invalid'], error.message), - code='item_invalid', - params={'nth': i}, - )) + except ValidationError as error: + errors.append(prefix_validation_error( + error, + prefix=self.error_messages['item_invalid'], + code='item_invalid', + params={'nth': index}, + )) if errors: raise ValidationError(errors) @@ -159,18 +162,20 @@ class SplitArrayField(forms.Field): if not any(value) and self.required: raise ValidationError(self.error_messages['required']) max_size = max(self.size, len(value)) - for i in range(max_size): - item = value[i] + for index in range(max_size): + item = value[index] try: cleaned_data.append(self.base_field.clean(item)) - errors.append(None) except ValidationError as error: - errors.append(ValidationError( - string_concat(self.error_messages['item_invalid'], ' '.join(error.messages)), + errors.append(prefix_validation_error( + error, + self.error_messages['item_invalid'], code='item_invalid', - params={'nth': i}, + params={'nth': index}, )) 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))): @@ -183,5 +188,5 @@ class SplitArrayField(forms.Field): errors = errors[:null_index] errors = list(filter(None, errors)) if errors: - raise ValidationError(errors) + raise ValidationError(list(chain.from_iterable(errors))) return cleaned_data |