3

save() 文档解释说:

ModelForm 的子类可以接受现有模型实例作为关键字参数实例;如果提供了这个, save() 将更新该实例。如果未提供, save() 将创建指定模型的新实例

然而,self.instanceinsave()总是有一个对象。

那么,我如何判断instance是现有的还是新创建的呢?

4

1 回答 1

6

您可以检查self.instance.pk模型之前是否已保存。但是,在您创建模型的新实例并在保存之前使用该实例初始化模型表单的情况下,这可能是不可靠的。

另一种可能性,基于 Django 1.2 中的 BaseModelForm 源代码,是检查self.instance._adding,如果模型已创建,则为 True,否则为 False。但是,我还没有测试过这个,所以 YMMV。

如果第一个选项可行,我建议使用它而不是 ModelForms 的未记录功能 - 它在未来不太可能发生变化并且可能更清晰。

于 2011-03-03T23:30:28.400 回答