我编写了自己的验证器,因为我的表单中有多个字段,其中适用相同的验证,并且我想使用 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(self) 的方式进行操作,...错误消息会正确显示。有什么办法可以解决我的问题,以便我可以获得更清晰的代码吗? 提前致谢。
Django 版本:1.10
最佳答案
您应该为不同的错误消息使用唯一的错误代码。如果您使用 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了解更多信息。
关于python - Django - 使用自己编写的验证器时出现错误的验证错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45077458/