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

Python 如何检测是否在ModelForm.clean中添加或编辑obj?,python,django,django-forms,django-admin,django-validation,Python,Django,Django Forms,Django Admin,Django Validation,我希望以不同的方式验证用户提交的数据,无论用户是添加新对象还是更改现有对象。如果对象已经存在(如果它存在于数据库中,则正在添加),那么除了id之外,没有其他模型属性可以在数据库中检查。 在其他方法中,如save_model,会传递一个add参数,以便您可以检查它,但在modelform.clean中没有这样的参数。如何在modelform.clean中进行验证 MyModelForm(forms.ModelForm): def clean(self): if add :

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

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

数据库级别不存在的对象有一个
id
(也许最好使用
pk
)即
None
(因为
id
是在数据库中插入时确定的,Django不分配该id)

因此,我们可以检查
self.instance.pk是否为None

MyModelForm(forms.ModelForm):

    def clean(self):
        if self.instance.pk is None:  # add
            validation_A()
        else:                         # edit
            validantion_B()
MyModelForm(forms.ModelForm):
def清洁(自清洁):
如果self.instance.pk为None:#添加
验证_A()
其他:#编辑
validantion_B()

当然,上述方法可能是“欺骗”的,因为在创建过程中传递对象之前,您可以将
id
设置为
None
,但是
Model.save(…)
对象也使用此事实来决定是否执行
插入
,或者
更新

您可以检查
self.instance.id是否为None
,因为新对象到目前为止都没有数据库分配的
id
。但是,尽管如此,我发现编辑/创建有不同的验证非常奇怪,因为通常这两者或多或少是对称的。你可以在你的init方法中使用pas变量并检查该变量…请给我们你的主要场景以及你的模型、表单和视图…我帮你@威勒姆·瓦农森,真管用!