我正在编写一个自定义验证器,它接收验证器列表,并检查它们是否通过,这样您就可以轻松检查这个整数字段应该低于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__
对象,而不是字符串,所以我无法加入它们来显示完整的错误消息。
如何从每个例外中获取错误消息?
答案 0 :(得分:1)
它们是django.utils.functional.__proxy__
的一个实例,因为Django核心验证器的message
可以翻译并包含在ugettext_lazy
中。我认为您可以使用类似", ".join(unicode(e) for e in errors)
的内容来强制评估消息。