Python Django-使用自写验证程序时出现错误的验证错误消息
我已经编写了自己的验证器,因为我的表单中有几个字段可以使用相同的验证,我希望使用clean_field()方法减少代码。 我的表单如下所示:Python Django-使用自写验证程序时出现错误的验证错误消息,python,django,validation,Python,Django,Validation,我已经编写了自己的验证器,因为我的表单中有几个字段可以使用相同的验证,我希望使用clean_field()方法减少代码。 我的表单如下所示: class EducationProjectAjaxForm(forms.Form): study_fees_year_1 = forms.IntegerField(required=False, validators=[validate_study_fees]) study_fees_year_2 = forms.IntegerField
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
我的验证器如下所示:
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
def验证研究费用(数据):
如果数据:
如果数据>100000:
raise ValidationError('Falscher Wert:%(值)s'),
代码='无效',
params={
“价值”:是指最高100.000欧元的研究费用,
)
如果数据%10!=0:
raise ValidationError('Falscher Wert:%(值)s'),
代码='无效',
params={
‘价值’:‘埃因格特拉格涅在十年前就已经存在了。’,
)
如果数据<0:
raise ValidationError('Falscher Wert:%(值)s'),
代码='无效',
参数={'value':'Der Finanzierungsbedarf darf nicht negative sein'},
)
返回数据
我的问题是,即使验证本身被正确应用,我也会收到错误的错误消息:“请选择一个整数”。该消息可能来自IntegerFields的正常验证,但是类似123的东西抛出相同的消息,即使它是一个整数。
如果采取清洁、学习、费用、一年(自我)的方式。。。错误消息显示正确。是否有什么方法可以解决我的问题,这样我就可以有更干净的代码?
提前谢谢
Django版本:1.10您应该为不同的错误消息使用唯一的错误代码。如果使用
code='invalid'
,Django将用无效代码的默认消息替换错误消息
此外,参数中的值应为您正在验证的值,而不是错误消息
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
def验证研究费用(数据):
如果数据:
如果数据>100000:
提高验证错误率('s sind maximum 100000欧元Studiengebühren pro Jahr erlaubt'),
代码='太大',
params={
“值”:数据},
)
如果数据%10!=0:
raise ValidationError('Der eingetragene Wert muss durch 10 teilbar sein'),
code='not_divisible_除以_10',
params={
“值”:数据},
)
如果数据<0:
提出验证错误('Der Finanzierungsbedarf nicht negative sein'),
代码='负值',
参数={'value':数据},
)
返回数据
有关更多信息,请参阅