2011-12-12 3 views
8

내가 제한된 선택과 필드 만들려고 노력 해요 : 나는 규칙을 위반하는 내용을 삽입하려고 할 때 그러나django 모델 CharField : max_length가 작동하지 않습니까?

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 쉘"로 (오류 또는 경고 메시지없이 성공). 어떤 길이의 텍스트라도이 필드에 입력 할 수 있습니다. 나는 SQLite3을 백엔드로 사용하고있다.

그렇게 되나요? 아니면 내가 놓친다면?

답변

16

SQLite는 VARCHAR의 길이를 시행하지 않습니다. SQLite Frequently asked questions에서

:

(9) SQLite는의 VARCHAR의 최대 크기는 무엇입니까?

SQLite는 VARCHAR의 길이를 적용하지 않습니다. VARCHAR (10)을 선언 할 수 있으며 SQLite는 500자를 넣을 수 있습니다. 그리고 모든 500자를 그대로 유지합니다. 절대로 자르지 않습니다.

django 관리자 또는 모델 양식을 사용하여 데이터베이스를 업데이트하는 경우 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. 
+1

답변을 주셔서 감사합니다. Alasdair! 정확성을 검사 할 유일한 곳은 full_clean()을 사용하는 것입니다. –