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

4 python django django-forms django-admin django-validation

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

MyModelForm(forms.ModelForm):
    def clean(self):
        if add :
            validation_A()
        else:
            validantion_B()
Run Code Online (Sandbox Code Playgroud)

Wil*_*sem 6

数据库级别不存在的对象有一个id(也许最好使用pk),即None(因为 是id在数据库中插入时确定的,Django 不会分配该 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()
Run Code Online (Sandbox Code Playgroud)

当然,上面的方法可以被“欺骗”,因为在创建过程中传递对象之前,您可以设置 to idNoneModel.save(..)对象也使用这个事实来决定是否执行INSERT INTO, 或UPDATE