Fixed #18898 -- Added tests with a fix for ModelMultipleChoiceField
This commit is contained in:
parent
892bc91cb0
commit
3318595c0b
|
@ -1072,6 +1072,6 @@ class ModelMultipleChoiceField(ModelChoiceField):
|
||||||
data = []
|
data = []
|
||||||
if len(initial) != len(data):
|
if len(initial) != len(data):
|
||||||
return True
|
return True
|
||||||
initial_set = set([force_text(value) for value in initial])
|
initial_set = set([force_text(value) for value in self.prepare_value(initial)])
|
||||||
data_set = set([force_text(value) for value in data])
|
data_set = set([force_text(value) for value in data])
|
||||||
return data_set != initial_set
|
return data_set != initial_set
|
||||||
|
|
|
@ -1071,6 +1071,38 @@ class ModelFormsetTest(TestCase):
|
||||||
FormSet = modelformset_factory(ClassyMexicanRestaurant, fields=["tacos_are_yummy"])
|
FormSet = modelformset_factory(ClassyMexicanRestaurant, fields=["tacos_are_yummy"])
|
||||||
self.assertEqual(sorted(FormSet().forms[0].fields.keys()), ['restaurant', 'tacos_are_yummy'])
|
self.assertEqual(sorted(FormSet().forms[0].fields.keys()), ['restaurant', 'tacos_are_yummy'])
|
||||||
|
|
||||||
|
def test_model_formset_with_initial_model_instance(self):
|
||||||
|
# has_changed should compare model instance and primary key
|
||||||
|
# see #18898
|
||||||
|
FormSet = modelformset_factory(Poem)
|
||||||
|
john_milton = Poet(name="John Milton")
|
||||||
|
john_milton.save()
|
||||||
|
data = {
|
||||||
|
'form-TOTAL_FORMS': 1,
|
||||||
|
'form-INITIAL_FORMS': 0,
|
||||||
|
'form-MAX_NUM_FORMS': '',
|
||||||
|
'form-0-name': '',
|
||||||
|
'form-0-poet': str(john_milton.id),
|
||||||
|
}
|
||||||
|
formset = FormSet(initial=[{'poet': john_milton}], data=data)
|
||||||
|
self.assertFalse(formset.extra_forms[0].has_changed())
|
||||||
|
|
||||||
|
def test_model_formset_with_initial_queryset(self):
|
||||||
|
# has_changed should work with queryset and list of pk's
|
||||||
|
# see #18898
|
||||||
|
FormSet = modelformset_factory(AuthorMeeting)
|
||||||
|
author = Author.objects.create(pk=1, name='Charles Baudelaire')
|
||||||
|
data = {
|
||||||
|
'form-TOTAL_FORMS': 1,
|
||||||
|
'form-INITIAL_FORMS': 0,
|
||||||
|
'form-MAX_NUM_FORMS': '',
|
||||||
|
'form-0-name': '',
|
||||||
|
'form-0-created': '',
|
||||||
|
'form-0-authors': list(Author.objects.values_list('id', flat=True)),
|
||||||
|
}
|
||||||
|
formset = FormSet(initial=[{'authors': Author.objects.all()}], data=data)
|
||||||
|
self.assertFalse(formset.extra_forms[0].has_changed())
|
||||||
|
|
||||||
def test_prevent_duplicates_from_with_the_same_formset(self):
|
def test_prevent_duplicates_from_with_the_same_formset(self):
|
||||||
FormSet = modelformset_factory(Product, extra=2)
|
FormSet = modelformset_factory(Product, extra=2)
|
||||||
data = {
|
data = {
|
||||||
|
|
Loading…
Reference in New Issue