如何检测是否在ModelForm.clean中添加或编辑了obj?

时间:2018-09-24 14:39:27

标签: python django django-forms django-admin django-validation

我想以不同的方式验证用户提交的数据,无论用户是添加新对象还是更改现有对象。除id之外,模型没有其他属性,我可以在db上检查对象是否已经存在(如果在db上,则将其添加)。 在其他方法中,例如save_model,将传递一个add参数,因此您可以检查它,但是在modelform.clean中没有这样的参数。如何在modelform.clean中进行验证?

MyModelForm(forms.ModelForm):
    def clean(self):
        if add :
            validation_A()
        else:
            validantion_B()

1 个答案:

答案 0 :(得分:3)

在数据库级别不存在的对象具有id的{​​{1}}(也许最好使用pk)(因为None是在数据库中插入后确定,Django不会分配该ID)。

所以我们可以检查id

self.instance.pk is None

当然,上述方法可以被“欺骗”,即在将对象传递给创建对象之前,您可以将MyModelForm(forms.ModelForm): def clean(self): if self.instance.pk is None: # add validation_A() else: # edit validantion_B()设置为id,但是将None对象设置为也使用此事实来决定是否执行Model.save(..)INSERT INTO