Python Django-使用自写验证程序时出现错误的验证错误消息

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

我已经编写了自己的验证器,因为我的表单中有几个字段可以使用相同的验证,我希望使用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
我的验证器如下所示:

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':数据},
)
返回数据
有关更多信息,请参阅