混淆了ModelForm()的孩子的save()中的self.instance

时间:2011-03-03 23:15:55

标签: django save instance modelform

save() documentation解释说:

  

ModelForm的子类可以接受   现有模型实例作为关键字   论证实例;如果是这样的话   提供,save()将更新   实例。如果没有提供,请保存()   将创建一个新的实例   指定的模型

但是,self.instance中的save()始终有一个对象。

那么,我如何判断instance是否存在或是否是新创建的?

1 个答案:

答案 0 :(得分:6)

您可以查看self.instance.pk以查看该模型之前是否已保存。但是,如果您创建了模型的新实例,然后在保存之前使用该实例初始化了一个模型,那么这可能是不可靠的。

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

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