mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #34633 -- Made create() method of reverse many-to-one managers clear prefetch_related() cache.
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							729266c6f2
						
					
				
				
					commit
					0fcd72bc48
				
			| @@ -840,6 +840,7 @@ def create_reverse_many_to_one_manager(superclass, rel): | ||||
|  | ||||
|         def create(self, **kwargs): | ||||
|             self._check_fk_val() | ||||
|             self._remove_prefetched_objects() | ||||
|             kwargs[self.field.name] = self.instance | ||||
|             db = router.db_for_write(self.model, instance=self.instance) | ||||
|             return super(RelatedManager, self.db_manager(db)).create(**kwargs) | ||||
|   | ||||
| @@ -1259,6 +1259,7 @@ database. | ||||
|  | ||||
|     Also, if you call the database-altering methods | ||||
|     :meth:`~django.db.models.fields.related.RelatedManager.add`, | ||||
|     :meth:`~django.db.models.fields.related.RelatedManager.create`, | ||||
|     :meth:`~django.db.models.fields.related.RelatedManager.remove`, | ||||
|     :meth:`~django.db.models.fields.related.RelatedManager.clear` or | ||||
|     :meth:`~django.db.models.fields.related.RelatedManager.set`, on | ||||
|   | ||||
| @@ -800,6 +800,14 @@ class ManyToOneTests(TestCase): | ||||
|         # refs #21563 | ||||
|         self.assertFalse(hasattr(Article(), "reporter")) | ||||
|  | ||||
|     def test_create_after_prefetch(self): | ||||
|         c = City.objects.create(name="Musical City") | ||||
|         d1 = District.objects.create(name="Ladida", city=c) | ||||
|         city = City.objects.prefetch_related("districts").get(id=c.id) | ||||
|         self.assertSequenceEqual(city.districts.all(), [d1]) | ||||
|         d2 = city.districts.create(name="Goa") | ||||
|         self.assertSequenceEqual(city.districts.all(), [d1, d2]) | ||||
|  | ||||
|     def test_clear_after_prefetch(self): | ||||
|         c = City.objects.create(name="Musical City") | ||||
|         d = District.objects.create(name="Ladida", city=c) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user