Loading django/forms/models.py +3 −0 Original line number Diff line number Diff line Loading @@ -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): Loading tests/regressiontests/model_forms_regress/tests.py +16 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading
django/forms/models.py +3 −0 Original line number Diff line number Diff line Loading @@ -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): Loading
tests/regressiontests/model_forms_regress/tests.py +16 −0 Original line number Diff line number Diff line Loading @@ -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 Loading