我正在做的是知道表单是创建新记录还是更新现有记录
class MyForm(forms.ModelForm):
def save(self, commit=True):
_new = True if not self.instance.id else False
keyword = super(MyForm, self).save()
if _new:
do_something()
return keyword
有没有其他方法可以在超级(MyForm,self)之后找到它。在调用“超级”之前调用.save()而没有明确地检查它,就像我正在使用“_new”一样?
答案 0 :(得分:4)
它只是.id
(实际为.pk
)字段。如果它是None
(可能是任何' falsy'值),那么它就是新记录,.save()
将使用INSERT
。否则,它是现有记录的关键,它将使用UPDATE
。
https://docs.djangoproject.com/en/1.8/ref/models/instances/#how-django-knows-to-update-vs-insert
答案 1 :(得分:2)
不,没有别的方法可以做到。 ModelForm
没有字段表示该对象已创建或更新。实际上,您可以将未保存的模型作为ModelForm
传递给instance
,在这种情况下,表单根本不会构造对象:
form = MyForm(instance=MyModel())
因此,检查self.instance.pk
是完成此任务的唯一方法。