From 6f229048ddd8c7347ff60dddfb9121e6021c7b2e Mon Sep 17 00:00:00 2001 From: Attila Tovt Date: Sat, 5 Dec 2015 03:14:46 +0200 Subject: [PATCH] Fixed #25547 -- Made Model.refresh_from_db() update FileField's instance. --- django/db/models/fields/files.py | 4 ++++ tests/model_fields/tests.py | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/django/db/models/fields/files.py b/django/db/models/fields/files.py index cc8fe181ba..3b39ba1f56 100644 --- a/django/db/models/fields/files.py +++ b/django/db/models/fields/files.py @@ -202,6 +202,10 @@ class FileDescriptor(object): file.field = self.field file.storage = self.field.storage + # Make sure that the instance is correct. + elif isinstance(file, FieldFile) and instance is not file.instance: + file.instance = instance + # That was fun, wasn't it? return instance.__dict__[self.field.name] diff --git a/tests/model_fields/tests.py b/tests/model_fields/tests.py index 34793eacdb..77361fae79 100644 --- a/tests/model_fields/tests.py +++ b/tests/model_fields/tests.py @@ -792,6 +792,11 @@ class FileFieldTests(unittest.TestCase): except OSError: self.fail("Deleting an unset FileField should not raise OSError.") + def test_refresh_from_db(self): + d = Document.objects.create(myfile='something.txt') + d.refresh_from_db() + self.assertIs(d.myfile.instance, d) + class BinaryFieldTests(test.TestCase): binary_data = b'\x00\x46\xFE'