【发布时间】:2019-08-08 21:33:50
【问题描述】:
我有一个很长的模型表单,主要是模型表单验证,我想在表单顶部出现“请更正以下错误”错误,当任何单个字段失败时验证。我试图通过覆盖模型表单上的 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 为空。
【问题讨论】:
-
这类似于this question,但我已经调用了super,所以这个解决方案似乎不起作用。
标签: django forms validation django-models django-forms