summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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())