﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
36207	refresh_from_db() doesn't clear cached ForeignObject relations	Jacob Walls	Jacob Walls	"Although it's an internal API `ForeignObject` is now [https://docs.djangoproject.com/en/5.2/topics/composite-primary-key/#composite-primary-keys-and-relations quasi-public]. When trying it out in a non-composite-pk situation I found that `refresh_from_db()` didn't clear out a related ForeignObject.

Here is a rough test using the composite_pk models (EDIT: prior version of test wasn't demonstrating anything):
{{{#!diff
diff --git a/tests/composite_pk/test_models.py b/tests/composite_pk/test_models.py
index 27157a52ad..7cd97a31a9 100644
--- a/tests/composite_pk/test_models.py
+++ b/tests/composite_pk/test_models.py
@@ -155,3 +155,8 @@ class CompositePKModelsTests(TestCase):
         self.assertEqual(4, token.permission_set.count())
         self.assertEqual(4, user.permission_set.count())
         self.assertEqual(4, comment.permission_set.count())
+
+    def test_refresh_foreign_object(self):
+        self.comment_1.user = None
+        self.comment_1.refresh_from_db()
+        self.assertEqual(self.comment_1.user, self.user_1)
}}}
----
{{{#!py
E
======================================================================
ERROR: test_refresh_foreign_object (composite_pk.test_models.CompositePKModelsTests.test_refresh_foreign_object)
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""/Users/.../django/tests/composite_pk/test_models.py"", line 161, in test_refresh_foreign_object
    self.comment_1.refresh_from_db()
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File ""/Users/.../py313/lib/python3.13/site-packages/django/db/models/base.py"", line 737, in refresh_from_db
    db_instance = db_instance_qs.get()
  File ""/Users/.../py313/lib/python3.13/site-packages/django/db/models/query.py"", line 633, in get
    raise self.model.DoesNotExist(
        ""%s matching query does not exist."" % self.model._meta.object_name
    )
composite_pk.models.tenant.Comment.DoesNotExist: Comment matching query does not exist.

----------------------------------------------------------------------
Ran 1 test in 0.008s

FAILED (errors=1)
}}}"	Bug	closed	Database layer (models, ORM)	5.2	Normal	fixed		Csirmaz Bendegúz Lily Foote	Ready for checkin	1	0	0	0	0	0
