0
我知道如果我做了类似object.save(commit=False)
之类的工作,我的m2m关系不会自动保存,但如果我稍后再拨打object.save()
,我也不得不致电self.save_m2m()
。为什么不save()自动调用save_m2m()?
因为我打电话给save()
我不明白为什么我需要手动拨打save_m2m()
。
有人可以解释这背后的逻辑?
谢谢。
我知道如果我做了类似object.save(commit=False)
之类的工作,我的m2m关系不会自动保存,但如果我稍后再拨打object.save()
,我也不得不致电self.save_m2m()
。为什么不save()自动调用save_m2m()?
因为我打电话给save()
我不明白为什么我需要手动拨打save_m2m()
。
有人可以解释这背后的逻辑?
谢谢。
该文档确实解释了这一点。
form.save()
包括创建和保存M2M关系;这是因为表单可以一次完成整个事情。但只要您使用commit=False
,表单就不能再创建M2M关系,因为对象本身并未保存;没有ID链接的M2M是不可能的。
object.save()
不能调用save_m2m
,因为这是表单的动作,而不是模型实例对象。该对象甚至不知道此时的m2m关系,因为该表单无法创建它们。这就是为什么你需要调用表格的save_m2m方法。
Gotcha。谢谢。 –