Commit 5cf96b49 authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #24418 -- Prevented crash in refresh_from_db with null fk

Thanks Johannes Lerch for the report, Tim Graham for the test case,
and Simon Charette for the review.
parent 2b19b3a0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -596,7 +596,7 @@ class Model(six.with_metaclass(ModelBase)):
            if field.rel and field.get_cache_name() in self.__dict__:
                rel_instance = getattr(self, field.get_cache_name())
                local_val = getattr(db_instance, field.attname)
                related_val = getattr(rel_instance, field.related_field.attname)
                related_val = None if rel_instance is None else getattr(rel_instance, field.related_field.attname)
                if local_val != related_val:
                    del self.__dict__[field.get_cache_name()]
        self._state.db = db_instance._state.db
+7 −0
Original line number Diff line number Diff line
@@ -735,6 +735,13 @@ class ModelRefreshTests(TestCase):
            self.assertFalse(hasattr(s3_copy.selfref, 'touched'))
            self.assertEqual(s3_copy.selfref, s2)

    def test_refresh_null_fk(self):
        s1 = SelfRef.objects.create()
        s2 = SelfRef.objects.create(selfref=s1)
        s2.selfref = None
        s2.refresh_from_db()
        self.assertEqual(s2.selfref, s1)

    def test_refresh_unsaved(self):
        pub_date = self._truncate_ms(datetime.now())
        a = Article.objects.create(pub_date=pub_date)