mirror of https://github.com/django/django.git
[1.6.x] Fixed #21568 -- Added missing ModelMultipleChoiceField to_python method
Thanks dibrovsd at gmail.com for the report and Simon Charette
for the review.
Backport of 8a9c8bb90
from master.
This commit is contained in:
parent
7d75a33331
commit
34c4b93c84
|
@ -1167,6 +1167,12 @@ class ModelMultipleChoiceField(ModelChoiceField):
|
||||||
msg = _('Hold down "Control", or "Command" on a Mac, to select more than one.')
|
msg = _('Hold down "Control", or "Command" on a Mac, to select more than one.')
|
||||||
self.help_text = string_concat(self.help_text, ' ', msg)
|
self.help_text = string_concat(self.help_text, ' ', msg)
|
||||||
|
|
||||||
|
def to_python(self, value):
|
||||||
|
if not value:
|
||||||
|
return []
|
||||||
|
to_py = super(ModelMultipleChoiceField, self).to_python
|
||||||
|
return [to_py(val) for val in value]
|
||||||
|
|
||||||
def clean(self, value):
|
def clean(self, value):
|
||||||
if self.required and not value:
|
if self.required and not value:
|
||||||
raise ValidationError(self.error_messages['required'], code='required')
|
raise ValidationError(self.error_messages['required'], code='required')
|
||||||
|
|
|
@ -22,6 +22,9 @@ Bug fixes
|
||||||
raised an error (#21439).
|
raised an error (#21439).
|
||||||
* Fixed a regression that prevented editable ``GenericRelation`` subclasses
|
* Fixed a regression that prevented editable ``GenericRelation`` subclasses
|
||||||
from working in ``ModelForms``.
|
from working in ``ModelForms``.
|
||||||
|
* Added missing ``to_python`` method for ``ModelMultipleChoiceField`` which
|
||||||
|
is required in Django 1.6 to properly detect changes from initial values
|
||||||
|
(#21568).
|
||||||
* Fixed ``django.contrib.humanize`` translations where the unicode sequence
|
* Fixed ``django.contrib.humanize`` translations where the unicode sequence
|
||||||
for the non-breaking space was returned verbatim (#21415).
|
for the non-breaking space was returned verbatim (#21415).
|
||||||
* Fixed :djadmin:`loaddata` error when fixture file name contained any dots
|
* Fixed :djadmin:`loaddata` error when fixture file name contained any dots
|
||||||
|
|
|
@ -44,6 +44,29 @@ class ModelMultipleChoiceFieldTests(TestCase):
|
||||||
f.clean([p.pk for p in Person.objects.all()[8:9]])
|
f.clean([p.pk for p in Person.objects.all()[8:9]])
|
||||||
self.assertTrue(self._validator_run)
|
self.assertTrue(self._validator_run)
|
||||||
|
|
||||||
|
def test_model_multiple_choice_show_hidden_initial(self):
|
||||||
|
"""
|
||||||
|
Test support of show_hidden_initial by ModelMultipleChoiceField.
|
||||||
|
"""
|
||||||
|
class PersonForm(forms.Form):
|
||||||
|
persons = forms.ModelMultipleChoiceField(show_hidden_initial=True,
|
||||||
|
queryset=Person.objects.all())
|
||||||
|
|
||||||
|
person1 = Person.objects.create(name="Person 1")
|
||||||
|
person2 = Person.objects.create(name="Person 2")
|
||||||
|
|
||||||
|
form = PersonForm(initial={'persons': [person1, person2]},
|
||||||
|
data={'initial-persons': [str(person1.pk), str(person2.pk)],
|
||||||
|
'persons': [str(person1.pk), str(person2.pk)]})
|
||||||
|
self.assertTrue(form.is_valid())
|
||||||
|
self.assertFalse(form.has_changed())
|
||||||
|
|
||||||
|
form = PersonForm(initial={'persons': [person1, person2]},
|
||||||
|
data={'initial-persons': [str(person1.pk), str(person2.pk)],
|
||||||
|
'persons': [str(person2.pk)]})
|
||||||
|
self.assertTrue(form.is_valid())
|
||||||
|
self.assertTrue(form.has_changed())
|
||||||
|
|
||||||
|
|
||||||
class TripleForm(forms.ModelForm):
|
class TripleForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
Loading…
Reference in New Issue