我对表单进行了验证检查,该表单依赖于多个字段,但最好让验证错误向用户明确显示哪些字段导致问题,而不仅仅是顶部的错误消息表格。 (表单有很多字段,因此更清楚地显示错误的位置)。
作为一种解决方法,我尝试在每个相关字段clean_field()
方法中创建相同的验证,以便用户在这些字段旁边看到错误。但是,我似乎只能从self.cleaned_data
访问该特定字段而不能访问任何其他字段?
或者可以从表单clean()
方法中引发字段错误吗?
尝试1:
def clean_supply_months(self):
if not self.cleaned_data.get('same_address') and not self.cleaned_data.get('supply_months'):
raise forms.ValidationError('Please specify time at address if less than 3 years.')
def clean_supply_years(self):
if not self.cleaned_data.get('same_address') and not self.cleaned_data.get('supply_years'):
raise forms.ValidationError('Please specify time at address if less than 3 years.')
def clean_same_address(self):
.....
答案 0 :(得分:7)
如果要访问多个字段的已清理数据,则应使用clean
方法而不是clean_<field>
方法。 add_error()
方法允许您将错误分配给特定字段。
例如,要将{em>请指定地址时间错误消息添加到same_address
字段,您可以执行以下操作:
def clean(self):
cleaned_data = super(ContactForm, self).clean()
if not self.cleaned_data.get('same_address') and not self.cleaned_data.get('supply_months'):
self.add_error('same_address', "Please specify time at address if less than 3 years.")
return cleaned_data
有关详细信息,请参阅validating fields that rely on each other上的文档。