mzu*_*mzu 5 forms django validation
我是Django的新手,对表单处理过程中的验证步骤感到有些困惑.我知道默认情况下需要所有表单字段类型(在我的情况下是ModelForm).我假设Django会引发VaidationError,以防所需的表单字段留空而不调用表单的clean方法.
这就是为什么我没有检查是否在以下clean()方法中设置了任何数据:
def clean(self):
date = self.cleaned_data.get('date')
time_start = self.cleaned_data.get('time_start')
time_end = self.cleaned_data.get('time_end')
user_type = self.cleaned_data.get('user_type')
if Event.objects.filter(user_type=user_type, date=date,
time_start__lt=time_start,
time_end__gt=time_start).exclude(pk=self.instance.pk).count():
raise forms.ValidationError("Overlapping with another event.")
Run Code Online (Sandbox Code Playgroud)
在将所有字段留空的情况下提交表单会导致a
ValueError:不能将None用作查询值.
如果我删除我的clean()方法,我将得到预期ValidationErrors的不填写必填字段 - 这是我所期望的clean()方法仍然存在.
知道什么可能导致这种情况发生吗?如果Django 在调用clean 之前没有检查所需的值,我会感到惊讶.
这很奇怪,因为字段的验证是在调用表单clean方法之前执行的.此外,存储从字段引发的错误,form.my_field.errors同时累积从表单的clean方法返回的错误form.non_field_errors.
以下是表单中执行的验证顺序:
Run Code Online (Sandbox Code Playgroud)full_clean() | Field clean() [field's built-in clean method] | Form clean_*() [custom validation method for field] | Form clean() [form's clean method] | cleaned_data/errors