我想在一个定制的clean方法中验证它的一些字段。
目前为止我有这个
class ProjectInfoForm(forms.Form):
module = forms.ModelChoiceField(
queryset=Module.objects.all(),
)
piece = forms.CharField(
widget=forms.Select(),
required=False,
)
span = forms.IntegerField(
max_value=100,
initial=48
)
max_span = forms.IntegerField(
max_value=100,
initial=0
)
def clean(self):
span = self.cleaned_data['span']
max_span = self.cleaned_data['max_span']
piece = self.cleaned_data.['piece']
# validate piece
try:
Piece.objects.get(pk=m)
except Piece.DoesNotExist:
raise forms.ValidationError(
'Illegal Piece selected!'
)
self._errors["piece"] = "Please enter a valid model"
# validate spans
if span > max_span:
raise forms.ValidationError(
'Span must be less than or equal to Maximum Span'
)
self._errors["span"] = "Please enter a valid span"
return self.cleaned_data
但是,如果两个子句都无效,则只会显示其中一条消息。如何才能获得所有无效消息?而且,我无法获得特定于字段的消息-如何才能包括要为特定字段显示的消息?
任何帮助都很感激。
4条答案
按热度按时间epfja78i1#
存储错误,直到方法结束才引发错误:
zsbz8rwp2#
在这种情况下,你应该编写一个自定义的clean_FIELDNAME方法。这样,当你在模板中使用{{form.errors}}时,以字段为中心的验证错误就可以显示出来。clean 方法o.t.h.用于验证跨越多个字段的逻辑。看看我上面发布的链接,你需要知道的关于验证django表单的所有信息都在那里。
goqiplq23#
发生这种情况是因为您使用的是
raise
。请尝试在代码中将其替换为以下两行:以及
j5fpnvbx4#
这似乎在Django的后续版本中有所改变(这似乎在2.1及更高版本中有效):
https://docs.djangoproject.com/en/dev/ref/forms/validation/#raising-multiple-errors 提供更多详细信息。