【问题标题】:confused about self.instance in save() of child of ModelForm()对 ModelForm() 子项的 save() 中的 self.instance 感到困惑
【发布时间】:2011-07-08 10:52:06
【问题描述】:

save() documentation 解释说:

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

然而,save() 中的self.instance 总是有一个对象。

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

【问题讨论】:

  • 您是否在ModelForm 的子类中覆盖save()?如果是这样,您可以在调用 super(MyForm, self).save( )) 之前自己检查实例。

标签: django save instance modelform


【解决方案1】:

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

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

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

【讨论】:

  • 我认为 self.instance._adding 在 Django 1.3 中可能已被弃用和删除。
猜你喜欢
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 2011-03-23
相关资源
最近更新 更多