[1.8.x] 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.
Backport of 5cf96b49e4
from master.
This commit is contained in:
parent
9d6f0dce13
commit
b825ec38c1
|
@ -629,7 +629,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
|
||||
|
|
|
@ -736,6 +736,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)
|
||||
|
|
Loading…
Reference in New Issue