Существует поле типа Django для хранения значений MyType
.Проверка пользовательских полей Django
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 или трассировку стека, если debug включен)
Вместо этого я хочу видеть форму с сообщением «Недопустимый формат» рядом с полем (так же, как если вы вводите неверную дату или номер). Как изменить класс поля, чтобы получить ошибки проверки в правильном месте.
Ну, это может быть вариант. – grep