我理解如果我执行类似object.save(commit=False)
的操作,我的m2m关系将不会自动保存,但如果我稍后调用object.save()
,我也被迫调用self.save_m2m()
。< / p>
由于我正在呼叫save()
,我不明白为什么我还需要手动呼叫save_m2m()
。
有人可以解释这背后的逻辑吗?
谢谢。
答案 0 :(得分:1)
文档确实解释了这一点。
form.save()
包括创建和保存M2M关系;这是因为表格可以一次完成整个过程。但是只要你使用commit=False
,表单就不能再创建M2M关系了,因为对象本身还没有被保存;如果没有ID链接,M2M是不可能的。
object.save()
无法调用save_m2m
,因为这是表单的操作,而不是模型实例对象。此对象甚至不知道此时的m2m关系,因为表单无法创建它们。这就是你需要调用表单的save_m2m方法的原因。