我编写了自己的验证器,因为我的表单中有几个字段,其中相同的验证适用,我想用clean_field()方法减少我的代码。 我的表格如下:
class EducationProjectAjaxForm(forms.Form):
study_fees_year_1 = forms.IntegerField(required=False, validators=[validate_study_fees])
study_fees_year_2 = forms.IntegerField(required=False, validators=[validate_study_fees])
study_fees_year_3 = forms.IntegerField(required=False, validators=[validate_study_fees])
study_fees_year_4 = forms.IntegerField(required=False, validators=[validate_study_fees])
我的验证器如下所示:
def validate_study_fees(data):
if data:
if data > 100000:
raise ValidationError(_('Falscher Wert: %(value)s'),
code='invalid',
params={
'value': 'Es sind maximal 100.000 € Studiengebühren pro Jahr erlaubt.'},
)
if data % 10 != 0:
raise ValidationError(_('Falscher Wert: %(value)s'),
code='invalid',
params={
'value': 'Der eingetragene Wert muss durch 10 teilbar sein.'},
)
if data < 0:
raise ValidationError(_('Falscher Wert: %(value)s'),
code='invalid',
params={'value': 'Der Finanzierungsbedarf darf nicht negativ sein'},
)
return data
我的问题是,即使验证本身已正确应用,我收到错误的错误消息:“请选择整数”。该消息可能来自IntegerFields的正常验证,但类似123的内容会抛出相同的消息,即使它是一个整数。 如果使用clean_study_fees_year_1(自我),...正确显示错误消息。有什么东西可以解决我的问题,所以我可以有更清洁的代码吗? 在此先感谢。
Django版本:1.10
答案 0 :(得分:0)
您应该为不同的错误消息使用唯一的错误代码。如果您使用code='invalid'
,Django会将您的错误消息替换为无效代码的默认消息。
此外,参数中的value
应该是您要验证的值,而不是错误消息。
def validate_study_fees(data):
if data:
if data > 100000:
raise ValidationError(_('Es sind maximal 100.000 € Studiengebühren pro Jahr erlaubt.'),
code='too_large',
params={
'value': data},
)
if data % 10 != 0:
raise ValidationError(_('Der eingetragene Wert muss durch 10 teilbar sein.'),
code='not_divisible_by_10',
params={
'value': data},
)
if data < 0:
raise ValidationError(_('Der Finanzierungsbedarf darf nicht negativ sein'),
code='negative_value',
params={'value': data},
)
return data
有关详细信息,请参阅docs on validators。