2014-02-21 2 views
1

Так я определил некоторые поля, как выбор:Выбранные для полей модели не применяются?

class MyModel(models.Model): 
    # Text language.                     
    ENGLISH = 'eng'                     
    FRENCH = 'fr'                     

    LANGUAGES_CHOICES = [                    
     (ENGLISH, 'English'),                   
     (FRENCH, 'French'),                   
    ]                         

    language = models.CharField(                  
      max_length=max(len(language) for language in LANGUAGES_CHOICES),       
      choices=LANGUAGES_CHOICES,                
      blank=False,                    
      null=True) 

Однако, я могу сделать MyModel(language='hurhurhur').save() без каких-либо ошибок или жалобы. Что мне не хватает?

+0

do 'python manage.py dbshell' и' desc appname_mymodel' и посмотреть, для чего установлен атрибут длины. Глядя на ваш код, 'max_length = 2', но явно не так. – karthikr

+1

Другое дело - попробуйте 'MyModel.objects.create (language = 'hurhurhur')' Вы получите сообщение об ошибке – karthikr

+0

@karthikr: Мне это нравится. Сделайте это, и я приму это. – Alex

ответ

4

Django проверяет модель при проверке модели или если вы явно вызываете modelinst.full_clean() Вызов modelinst.save() не проверяется.

+0

Можно ли включить вызов 'full_clean()' для каждого сохранения, не считая переопределения метода 'save'? – Alex

+1

Не совсем. Я думаю, что самый простой способ - создать базовый класс, из которого все ваши модели получаются, из которых отменяется сохранение, и этот базовый класс наследуется от класса модели django. – Nils

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