8000 Fixed #36207 -- Cleared cached ForeignObject relations via refresh_fr… · django/django@69ab6e5 · GitHub
[go: up one dir, main page]

Skip to content

Commit 69ab6e5

Browse files
jacobtylerwallssarahboyce
authored andcommitted
Fixed #36207 -- Cleared cached ForeignObject relations via refresh_from_db().
1 parent f5197be commit 69ab6e5

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

django/db/models/base.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -756,11 +756,12 @@ def refresh_from_db(self, using=None, fields=None, from_queryset=None):
756756

757757
db_instance = db_instance_qs.get()
758758
non_loaded_fields = db_instance.get_deferred_fields()
759-
for field in self._meta.concrete_fields:
759+
for field in self._meta.fields:
760760
if field.attname in non_loaded_fields:
761761
# This field wasn't refreshed - skip ahead.
762762
continue
763-
setattr(self, field.attname, getattr(db_instance, field.attname))
763+
if field.concrete:
764+
setattr(self, field.attname, getattr(db_instance, field.attname))
764765
# Clear or copy cached foreign keys.
765766
if field.is_relation:
766767
if field.is_cached(db_instance):

tests/foreign_object/tests.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,15 @@ def test_prefetch_related_m2m_reverse_works(self):
450450
normal_groups_lists = [list(p.groups.all()) for p in Person.objects.all()]
451451
self.assertEqual(groups_lists, normal_groups_lists)
452452

453+
def test_refresh_foreign_object(self):
454+
member = Membership.objects.create(
455+
membership_country=self.usa, person=self.bob, group=self.cia
456+
)
457+
member.person = self.jim
458+
with self.assertNumQueries(1):
459+
member.refresh_from_db()
460+
self.assertEqual(member.person, self.bob)
461+
453462
@translation.override("fi")
454463
def test_translations(self):
455464
a1 = Article.objects.create(pub_date=datetime.date.today())

0 commit comments

Comments
 (0)
0