модель 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.