我有一个较长的模型表单,主要用于模型表单验证,当任何单个字段都失败时,我想在表单顶部显示一个“ 请更正以下错误”错误验证。我尝试通过覆盖modelform上的clean方法来执行此操作,但是此时没有错误。
# models.py
class MyModel(models.Model):
myfield = models.IntegerField(default=0, validators=[MinValueValidator(0)])
# forms.py
class MyModelForm(forms.ModelForm)
class Meta:
models = MyModel
fields = ['myfield']
def clean(self):
cleaned_data = super().clean()
if any([field.errors for field in self]):
raise forms.ValidationError("Please correct the errors below.")
return cleaned_data
当我输入一个无效值(例如-1)时,该字段仍在其下方显示正确的错误消息,但是该表单没有任何错误。
我正在使用{% crispy %}
来呈现表单,该表单会自动将表单错误放在顶部,因此这不是模板问题。
问题(来自调试器)是在调用clean()
时,form['myfield'].errors
为空。
答案 0 :(得分:2)
这不是您要在表单中执行的操作。您可以在模板中完成此操作:
\Crypt::decrypt(Cookie::get('language'), false)
实际上,这几乎就是the admin change form template的作用。
答案 1 :(得分:0)
如丹尼尔所说,通常您将在模板中检查form.errors
而不是在clean方法中引发另一个错误。
如果您确实想使用clean
方法执行此操作,请检查self.errors
而不是单个字段错误。
def clean(self):
cleaned_data = super().clean()
if self.errors:
raise forms.ValidationError("Please correct the errors below.")
return cleaned_data