Существует тип поля Django для хранения значений MyType
.
from django.core.exceptions import ValidationError
from django.db import models
class MyTypeField(models.Field):
__metaclass__ = models.SubfieldBase
def db_type(self, connection):
return "text"
def to_python(self, value):
if isinstance(value, basestring):
try:
value = MyType.deserialize(value)
except ParseError, e:
raise ValidationError("Invalid format: "+str(e))
assert isinstance(value, MyType)
return value
def get_prep_value(self, value):
if not isinstance(value, MyType):
raise ValidationError("Not MyType")
return value.serialize()
Я пытаюсь использовать поля этого типа на странице администратора модели.Все работает хорошо, если пользователь вводит допустимое значение в поле.Но если введенное значение неверно, ValidationError
не перехватывается (вы получаете ошибку 500 или трассировку стека, если включена отладка)
Вместо этого я хочу увидеть форму с сообщением «Неверный формат»рядом с полем (так же, как если вы введете неправильную дату или номер).Как изменить класс поля для получения ошибок проверки в правильном месте.