1
0
mirror of https://github.com/django/django.git synced 2025-05-15 19:36:30 +00:00

Fixed #36207 -- Cleared cached ForeignObject relations via refresh_from_db().

This commit is contained in:
Jacob Walls 2025-03-09 11:18:11 -04:00 committed by Sarah Boyce
parent f5197be818
commit 69ab6e5896
2 changed files with 12 additions and 2 deletions

View File

@ -756,11 +756,12 @@ class Model(AltersData, metaclass=ModelBase):
db_instance = db_instance_qs.get() db_instance = db_instance_qs.get()
non_loaded_fields = db_instance.get_deferred_fields() non_loaded_fields = db_instance.get_deferred_fields()
for field in self._meta.concrete_fields: for field in self._meta.fields:
if field.attname in non_loaded_fields: if field.attname in non_loaded_fields:
# This field wasn't refreshed - skip ahead. # This field wasn't refreshed - skip ahead.
continue continue
setattr(self, field.attname, getattr(db_instance, field.attname)) if field.concrete:
setattr(self, field.attname, getattr(db_instance, field.attname))
# Clear or copy cached foreign keys. # Clear or copy cached foreign keys.
if field.is_relation: if field.is_relation:
if field.is_cached(db_instance): if field.is_cached(db_instance):

View File

@ -450,6 +450,15 @@ class MultiColumnFKTests(TestCase):
normal_groups_lists = [list(p.groups.all()) for p in Person.objects.all()] normal_groups_lists = [list(p.groups.all()) for p in Person.objects.all()]
self.assertEqual(groups_lists, normal_groups_lists) self.assertEqual(groups_lists, normal_groups_lists)
def test_refresh_foreign_object(self):
member = Membership.objects.create(
membership_country=self.usa, person=self.bob, group=self.cia
)
member.person = self.jim
with self.assertNumQueries(1):
member.refresh_from_db()
self.assertEqual(member.person, self.bob)
@translation.override("fi") @translation.override("fi")
def test_translations(self): def test_translations(self):
a1 = Article.objects.create(pub_date=datetime.date.today()) a1 = Article.objects.create(pub_date=datetime.date.today())