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)
数据库级别不存在的对象有一个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 id,None但Model.save(..)对象也使用这个事实来决定是否执行INSERT INTO, 或UPDATE。
| 归档时间: |
|
| 查看次数: |
2260 次 |
| 最近记录: |