Выполняет ли 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() здесь, но не смог понять, что он делает.

Вернуться на верх