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