如何在Django上引发多个ValidationError?

时间:2018-03-12 01:02:22

标签: django validation django-rest-framework

from rest_framework.exceptions import ValidationError

def to_representation(self, request_data):
    raise ValidationError({
        'field_name': ["Field not allowed to change"]
    })

在上面的示例中,如何抛出多个验证错误?我想把它们当作各种各样的字段展示出来。

2 个答案:

答案 0 :(得分:6)

你抛出一个ValidationError,里面有多个字段错误:

    raise ValidationError({
        'field_name_1': ["Field not allowed to change"],
        'field_name_2': ["Field not allowed to change"],
    })

答案 1 :(得分:1)

我不建议仅在一个函数中验证每个字段。相反,您应该做的是使用一个函数来验证一个字段,这更容易,更简单。如果要进行多次验证,可以在link上找到用于处理多个错误的文档。该文档显示以下示例:

# Good
raise ValidationError([
    ValidationError(_('Error 1'), code='error1'),
    ValidationError(_('Error 2'), code='error2'),
])

# Bad
raise ValidationError([
    _('Error 1'),
    _('Error 2'),
])

这是我的一个例子:

def validate_field(value):
    errors = []

    if len(value) > 50:
        errors.append(ValidationError(
            'Error message'
        ))
    if not value.isalpha():
        errors.append(ValidationError(
            'Error message'
        ))

    if errors:
        raise ValidationError(errors)