mirror of
https://github.com/django/django.git
synced 2024-12-23 01:25:58 +00:00
Fixed #26970 -- Fixed crash with disabled ModelMultipleChoiceField.
This commit is contained in:
parent
36fbf9b7d1
commit
4e86168290
@ -1251,6 +1251,7 @@ class ModelMultipleChoiceField(ModelChoiceField):
|
||||
return list(self._check_values(value))
|
||||
|
||||
def clean(self, value):
|
||||
value = self.prepare_value(value)
|
||||
if self.required and not value:
|
||||
raise ValidationError(self.error_messages['required'], code='required')
|
||||
elif not self.required and not value:
|
||||
|
@ -1534,6 +1534,31 @@ class ModelChoiceFieldTests(TestCase):
|
||||
['Select a valid choice. That choice is not one of the available choices.']
|
||||
)
|
||||
|
||||
def test_disabled_multiplemodelchoicefield(self):
|
||||
class ArticleForm(forms.ModelForm):
|
||||
categories = forms.ModelMultipleChoiceField(Category.objects.all(), required=False)
|
||||
|
||||
class Meta:
|
||||
model = Article
|
||||
fields = ['categories']
|
||||
|
||||
category1 = Category.objects.create(name='cat1')
|
||||
category2 = Category.objects.create(name='cat2')
|
||||
article = Article.objects.create(
|
||||
pub_date=datetime.date(1988, 1, 4),
|
||||
writer=Writer.objects.create(name='Test writer'),
|
||||
)
|
||||
article.categories.set([category1.pk])
|
||||
|
||||
form = ArticleForm(data={'categories': [category2.pk]}, instance=article)
|
||||
self.assertEqual(form.errors, {})
|
||||
self.assertEqual([x.pk for x in form.cleaned_data['categories']], [category2.pk])
|
||||
# Disabled fields use the value from `instance` rather than `data`.
|
||||
form = ArticleForm(data={'categories': [category2.pk]}, instance=article)
|
||||
form.fields['categories'].disabled = True
|
||||
self.assertEqual(form.errors, {})
|
||||
self.assertEqual([x.pk for x in form.cleaned_data['categories']], [category1.pk])
|
||||
|
||||
def test_modelchoicefield_iterator(self):
|
||||
"""
|
||||
Iterator defaults to ModelChoiceIterator and can be overridden with
|
||||
|
Loading…
Reference in New Issue
Block a user