2016-11-01 2 views
2

Я использую Django 1.10 и попытаться сделать некоторые модели, в том числе несколько простых вариантов, это мой models.pyДжанго не проверяет длину CharField на objects.create

@python_2_unicode_compatible 
class Person(models.Model): 
    Senior='A' 
    Middle='B' 
    Junior='C' 
    class_person=[(Senior,'Senior'),(Middle,'Middle'),\ 
      (Junior,'Junior')] 

    name=models.CharField(max_length=100) 
    grade=models.CharField(max_length=2,choices=class_person,default=Junior) 

    def __str__(self): 
     return '%s in %s' % (self.name,self.grade) 

    def is_senior(self): 
     return self.grade in (self.Senior,self.Middle) 

Теперь я пытаюсь сделать некоторые Person объекты экземпляра с помощью оболочки, например

Person.objects.create(name='John',grade='Another') 

теперь я называю

Person.objects.all() 

и возвращает

<QuerySet [<Person: John in Another>]> 

Мой вопрос, почему Person класс atribute может создать «другой», как я знаю, что модели класса имеет максимальную длину 2. спасибо за объяснение

+0

Ты уверен, что в базе данных определения столбцов таблиц соответствуют вашей модели? Если вы сыграли со значением max_length (или добавили его) после создания таблиц, я думаю, вы можете увидеть такое поведение. – mimo

+0

Является ли @mimo уверенным, что вы применили все необходимые миграции? И какой тип db вы используете? –

+0

@mimo да, я уверен, что применил все миграции до того, как я создал экземпляр объекта person, и я дважды проверяю его перед ответом на ваш вопрос, создав еще одну модель. –

ответ

-1

Scrap мой предыдущий ответ - Согласно django model CharField: max_length does not work?

SQLite не применяет атрибут max_length.

Что касается ввода неправильного выбора, возможно, это может быть проблема с Django 1.10 (не верьте моему слову на эту часть).

+0

С Django 1.10, я получаю сообщение об ошибке при попытке сохранить экземпляр с CharField с более длинным значением, чем max_length: "слишком длинное значение для символа типа (2))». Также ваш ответ не объясняет, почему Wira может печатать «]>», если поле может содержать только 2 символа. – mimo

2

Как работает sqlite3. Id не навязывает ограничения длины

https://sqlite.org/faq.html#q9

SQLite не обеспечивает длину VARCHAR. Вы можете объявить VARCHAR (10), и SQLite будет счастлив сохранить там 500-миллионную строку символов. И он сохранит все 500 миллионов персонажей. Ваш контент никогда не усекается. SQLite понимает тип столбца «VARCHAR (N)», чтобы быть таким же, как «TEXT», независимо от значения N.

Если вы хотите более функционален Postgres использования DB или MySQL

+0

@WiraBhakti это не «возможно», это на самом деле. Я получил эту цитату прямо из официальных документов. Прочтите ссылку в мой ответ –

+0

Sardorbek Imomaliev извините, потому что я родом из разных langguage, английский не предпочитает langguage в моей стране, поэтому я очень редко говорю по-английски. приветствие из Indonesia –

+1

@WiraBhakti понимается. Привет из России)) Также, если это ответили на ваш вопрос, вы можете принять, нажав кнопку под голосом. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

Смежные вопросы