Commit 34daa080 authored by Jannis Leidel's avatar Jannis Leidel
Browse files

Fixed #14144 -- Made sure custom validators are called in...

Fixed #14144 -- Made sure custom validators are called in ModelMultipleChoiceFields. Thanks, matiasb.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@14886 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent dad28e85
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1045,6 +1045,9 @@ class ModelMultipleChoiceField(ModelChoiceField):
        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 −0
Original line number Diff line number Diff line
@@ -24,6 +24,22 @@ class ModelMultipleChoiceFieldTests(TestCase):
        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