无法在Django自定义验证器中获取异常消息

时间:2013-12-14 03:04:41

标签: python django validation

我正在编写一个自定义验证器,它接收验证器列表,并检查它们是否通过,这样您就可以轻松检查这个整数字段应该低于10还是高于100 。这就是我到目前为止所做的:

class ValidateAnyOf(object):
    def __init__(self, *validators):
        self.validators = validators

    def __call__(self, value):
        errors = []
        for validator in self.validators:
            try:
                validator(value)
                return
            except ValidationError as e:
                errors.append(e.message)

        raise ValidationError('Combined validation failed:' + ','.join(errors))

class TestModel(models.Model):
    score = models.IntegerField(validators=[ValidateAnyOf(validators.MaxValueValidator(10),
                                                          validators.MinValueValidator(100))])

逻辑还可以。当没有验证器通过时出现问题。我想显示错误列表,因此我将列表中的异常消息存储在列表中。问题是e.message似乎是django.utils.functional.__proxy__对象,而不是字符串,所以我无法加入它们来显示完整的错误消息。

如何从每个例外中获取错误消息?

1 个答案:

答案 0 :(得分:1)

它们是django.utils.functional.__proxy__的一个实例,因为Django核心验证器的message可以翻译并包含在ugettext_lazy中。我认为您可以使用类似", ".join(unicode(e) for e in errors)的内容来强制评估消息。