2016-10-31 28 views
0

我知道如果我做了类似object.save(commit=False)之类的工作,我的m2m关系不会自动保存,但如果我稍后再拨打object.save(),我也不得不致电self.save_m2m()为什么不save()自动调用save_m2m()?

因为我打电话给save()我不明白为什么我需要手动拨打save_m2m()

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

谢谢。

回答

1

该文档确实解释了这一点。

form.save()包括创建和保存M2M关系;这是因为表单可以一次完成整个事情。但只要您使用commit=False,表单就不能再创建M2M关系,因为对象本身并未保存;没有ID链接的M2M是不可能的。

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

+0

Gotcha。谢谢。 –

相关问题