如果模型表创建新记录或更新现有记录,有没有办法在表单.save()方法中查找?

时间:2015-02-10 13:57:51

标签: django django-forms

我正在做的是知道表单是创建新记录还是更新现有记录

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”一样?

2 个答案:

答案 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是完成此任务的唯一方法。