Python 如何检测是否在ModelForm.clean中添加或编辑obj?
我希望以不同的方式验证用户提交的数据,无论用户是添加新对象还是更改现有对象。如果对象已经存在(如果它存在于数据库中,则正在添加),那么除了id之外,没有其他模型属性可以在数据库中检查。 在其他方法中,如save_model,会传递一个add参数,以便您可以检查它,但在modelform.clean中没有这样的参数。如何在modelform.clean中进行验证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 :
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变量并检查该变量…请给我们你的主要场景以及你的模型、表单和视图…我帮你@威勒姆·瓦农森,真管用!