Выполняет ли django неявное обновление связанных моделей?
Я пытаюсь понять, как работает следующий код под капотом:
# models.py
class M1(models.Model):
m2 = models.ForeignKey('M2', related_name='m1s', null=True, blank=True)
class M2(models.Model):
m1 = models.ForeignKey('M1', related_name='m2_set', null=True, blank=True)
# elsewhere
m2 = M2()
m1 = M1()
m1.m2 = m2
m1.save() # no error! according to the docs, this shouldn't be allowed
m1_persisted = M1.objects.get(id=m1.id)
print(m1_persisted.m2 == None) # True, as expected since m2 was never saved
m2.m1 = m1
m2.save() # this is fine, m1 was previously saved
m1_persisted = M1.objects.get(id=m1.id)
print(m1_persisted.m2.id) # prints m2's id! why does calling m2.save() update m1?
Согласно документации django docs похоже, что я должен получить ошибку вида ValueError: save() prohibited to prevent data loss due to unsaved related object при первом вызове m1.save(), но я этого не делаю. Это ожидаемое поведение или здесь происходит что-то другое (возможно, в переопределенном методе сохранения)
Я пытался копаться в исходниках django для .save() здесь, но не смог понять, что он делает.