如何检测 ModelForm.clean 中是否添加或编辑了 obj?
How to detect if obj is being added or edited inside ModelForm.clean?
我想以不同方式验证用户提交的数据,无论用户是添加新对象还是更改现有对象。如果对象已经存在(如果它存在于数据库中,则正在添加),除了我可以在数据库上检查的 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 is None
:
MyModelForm(forms.ModelForm):
def clean(self):
if <b>self.instance.pk is None</b>: # add
validation_A()
else: # edit
validantion_B()
当然上面的方法可以是"spoofed",也就是说在你创建对象之前,你可以把id
设置成None
,但是Model.save(..)
对象也使用这个事实来决定是执行 INSERT INTO
还是 UPDATE
.
我想以不同方式验证用户提交的数据,无论用户是添加新对象还是更改现有对象。如果对象已经存在(如果它存在于数据库中,则正在添加),除了我可以在数据库上检查的 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 is None
:
MyModelForm(forms.ModelForm):
def clean(self):
if <b>self.instance.pk is None</b>: # add
validation_A()
else: # edit
validantion_B()
当然上面的方法可以是"spoofed",也就是说在你创建对象之前,你可以把id
设置成None
,但是Model.save(..)
对象也使用这个事实来决定是执行 INSERT INTO
还是 UPDATE
.