为什么save()自动调用save_m2m()?

时间:2016-10-31 15:18:59

标签: django django-forms

我理解如果我执行类似object.save(commit=False)的操作,我的m2m关系将不会自动保存,但如果我稍后调用object.save(),我也被迫调用self.save_m2m()。< / p>

由于我正在呼叫save(),我不明白为什么我还需要手动呼叫save_m2m()

有人可以解释这背后的逻辑吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

文档确实解释了这一点。

form.save()包括创建和保存M2M关系;这是因为表格可以一次完成整个过程。但是只要你使用commit=False,表单就不能再创建M2M关系了,因为对象本身还没有被保存;如果没有ID链接,M2M是不可能的。

object.save()无法调用save_m2m,因为这是表单的操作,而不是模型实例对象。此对象甚至不知道此时的m2m关系,因为表单无法创建它们。这就是你需要调用表单的save_m2m方法的原因。