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'