модель django CharField: максимальная длина не работает?
Я пытаюсь сделать поле с ограниченным выбором:
Action_Types=(
('0','foo'),
('1','bar'),
)
class Foo(models.Model):
myAction=models.CharField(max_length=1,choices=Action_Types)
def __unicode__(self):
return '%d %s'%(self.pk,self.myAction)
однако, когда я пытался вставить контент, нарушающий правила, это удалось без каких-либо ошибок или предупреждающих сообщений (с "manage.py shell"). Кажется, в это поле можно поместить любой текст любой длины. Я использую SQLite3 в качестве бэкэнда.
это должно быть так? Или если я что-то упустил?
1 ответов
SQLite не применяет длину VARCHAR.
С SQLite Часто задаваемые вопросы:
(9) каков максимальный размер VARCHAR в SQLite?
SQLite не применяет длину VARCHAR. Вы можете объявить VARCHAR (10), и SQLite будет рад позволить вам поместить в него 500 символов. И он сохранит все 500 символов нетронутыми-он никогда не обрезается.
Если вы обновите базу данных с помощью Django admin или model forms, Django сделает проверку длины для вас. В оболочке вы можете вручную вызвать full_clean
перед сохранением, и поймать ошибку при проверке.
f = Foo(myAction="more than 1 char")
try:
f.full_clean()
f.save()
except ValidationError as e:
# Do something based on the errors contained in e.message_dict.