Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #14144 -- Made sure custom validators are called in ModelMultip…

…leChoiceFields. Thanks, matiasb.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@14886 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 34daa0804c768a6cdeb31d123833b66b5ad89f3c 1 parent dad28e8
Jannis Leidel jezdez authored
3  django/forms/models.py
View
@@ -1045,6 +1045,9 @@ def clean(self, value):
for val in value:
if force_unicode(val) not in pks:
raise ValidationError(self.error_messages['invalid_choice'] % val)
+ # Since this overrides the inherited ModelChoiceField.clean
+ # we run custom validators here
+ self.run_validators(value)
return qs
def prepare_value(self, value):
16 tests/regressiontests/model_forms_regress/tests.py
View
@@ -24,6 +24,22 @@ def test_model_multiple_choice_number_of_queries(self):
f = forms.ModelMultipleChoiceField(queryset=Person.objects.all())
self.assertNumQueries(1, f.clean, [1, 3, 5, 7, 9])
+ def test_model_multiple_choice_run_validators(self):
+ """
+ Test that ModelMultipleChoiceField run given validators (#14144).
+ """
+ for i in range(30):
+ Person.objects.create(name="Person %s" % i)
+
+ self._validator_run = False
+ def my_validator(value):
+ self._validator_run = True
+
+ f = forms.ModelMultipleChoiceField(queryset=Person.objects.all(),
+ validators=[my_validator])
+ f.clean([1,2])
+ self.assertTrue(self._validator_run)
+
class TripleForm(forms.ModelForm):
class Meta:
model = Triple
Please sign in to comment.
Something went wrong with that request. Please try again.