mirror of https://github.com/django/django.git
Fixed #29896 -- Fixed incorrect Model.save() cache relation clearing for foreign keys that use to_field.
Regression in ee49306176
.
This commit is contained in:
parent
5e8a07d69d
commit
f77fc56c96
|
@ -676,9 +676,9 @@ class Model(metaclass=ModelBase):
|
||||||
"save() prohibited to prevent data loss due to "
|
"save() prohibited to prevent data loss due to "
|
||||||
"unsaved related object '%s'." % field.name
|
"unsaved related object '%s'." % field.name
|
||||||
)
|
)
|
||||||
# If the relationship's pk was changed, clear the cached
|
# If the relationship's pk/to_field was changed, clear the
|
||||||
# relationship.
|
# cached relationship.
|
||||||
if obj and obj.pk != getattr(self, field.attname):
|
if obj and getattr(obj, field.target_field.attname) != getattr(self, field.attname):
|
||||||
field.delete_cached_value(self)
|
field.delete_cached_value(self)
|
||||||
|
|
||||||
using = using or router.db_for_write(self.__class__, instance=self)
|
using = using or router.db_for_write(self.__class__, instance=self)
|
||||||
|
|
|
@ -17,3 +17,6 @@ Bugfixes
|
||||||
|
|
||||||
* Fixed a regression in Django 2.0 where test databases aren't reused with
|
* Fixed a regression in Django 2.0 where test databases aren't reused with
|
||||||
``manage.py test --keepdb`` on MySQL (:ticket:`29827`).
|
``manage.py test --keepdb`` on MySQL (:ticket:`29827`).
|
||||||
|
|
||||||
|
* Fixed a regression where cached foreign keys that use ``to_field`` were
|
||||||
|
incorrectly cleared in ``Model.save()`` (:ticket:`29896`).
|
||||||
|
|
|
@ -666,3 +666,9 @@ class ManyToOneTests(TestCase):
|
||||||
self.a.reporter_id = self.r2.pk
|
self.a.reporter_id = self.r2.pk
|
||||||
self.a.save()
|
self.a.save()
|
||||||
self.assertEqual(self.a.reporter, self.r2)
|
self.assertEqual(self.a.reporter, self.r2)
|
||||||
|
|
||||||
|
def test_cached_foreign_key_with_to_field_not_cleared_by_save(self):
|
||||||
|
parent = Parent.objects.create(name='a')
|
||||||
|
child = ToFieldChild.objects.create(parent=parent)
|
||||||
|
with self.assertNumQueries(0):
|
||||||
|
self.assertIs(child.parent, parent)
|
||||||
|
|
Loading…
Reference in New Issue