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