Я пишу пользовательский валидатор, который получает список валидаторов и проверяет, проходит ли кто-либо из них, поэтому вы можете легко проверить такие вещи, как , это целочисленное поле должно быть ниже чем 10 или выше 100. Это то, что у меня есть до сих пор:Не удается получить сообщение об исключении в пользовательском валидаторе Django
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__
вместо строки, поэтому я не могу присоединиться к ним, чтобы показать полное сообщение об ошибке.
Как я могу получить сообщение об ошибке из каждого исключения?
'unicode (e.message)' сделал трюк. Мне пришлось вручную передать параметры для заполнителей, используя 'errors.append (unicode (e.message)% e.params)', и это сработало. –
Вы также можете использовать django.utils.encoding.force_text вместо unicode. – ybendana