summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Walls <jacobtylerwalls@gmail.com>2025-03-09 11:18:11 -0400
committerSarah Boyce <42296566+sarahboyce@users.noreply.github.com>2025-05-09 13:01:04 +0100
commit69ab6e5896ff1a6d9e7ab8a28e75c28d3d7d65f4 (patch)
tree7c498fd4e7e475f1e814ca823159b5a96f3b0cd4
parentf5197be818dfcb0d58d6e5f7cc44ec5343010b58 (diff)
Fixed #36207 -- Cleared cached ForeignObject relations via refresh_from_db().
-rw-r--r--django/db/models/base.py5
-rw-r--r--tests/foreign_object/tests.py9
2 files changed, 12 insertions, 2 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index 34c537fea0..eaedd48748 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -756,11 +756,12 @@ class Model(AltersData, metaclass=ModelBase):
db_instance = db_instance_qs.get()
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:
# This field wasn't refreshed - skip ahead.
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.
if field.is_relation:
if field.is_cached(db_instance):
diff --git a/tests/foreign_object/tests.py b/tests/foreign_object/tests.py
index 7670330995..696dfcd5fd 100644
--- a/tests/foreign_object/tests.py
+++ b/tests/foreign_object/tests.py
@@ -450,6 +450,15 @@ class MultiColumnFKTests(TestCase):
normal_groups_lists = [list(p.groups.all()) for p in Person.objects.all()]
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")
def test_translations(self):
a1 = Article.objects.create(pub_date=datetime.date.today())