mirror of
				https://github.com/django/django.git
				synced 2025-11-04 05:35:37 +00:00 
			
		
		
		
	Fixed #18898 -- Added tests with a fix for ModelMultipleChoiceField
This commit is contained in:
		
							parent
							
								
									892bc91cb0
								
							
						
					
					
						commit
						3318595c0b
					
				
					 2 changed files with 33 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -1072,6 +1072,6 @@ class ModelMultipleChoiceField(ModelChoiceField):
 | 
			
		|||
            data = []
 | 
			
		||||
        if len(initial) != len(data):
 | 
			
		||||
            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])
 | 
			
		||||
        return data_set != initial_set
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1071,6 +1071,38 @@ class ModelFormsetTest(TestCase):
 | 
			
		|||
        FormSet = modelformset_factory(ClassyMexicanRestaurant, fields=["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):
 | 
			
		||||
        FormSet = modelformset_factory(Product, extra=2)
 | 
			
		||||
        data = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue