2009-09-17 2 views
6

내가 장고 1.1과 같은 모델을했습니다 : 기본적으로, 나는 모두가 '널 (null)'과 '빈'거짓 것을 읽고 있어요model.CharField ('blank = False')가 save()에서 작동합니까?

class Booking(models.Model): 
    name = models.CharField(max_length=100) 

.

class SimpleTest(TestCase): 
    def test_booking_save(self): 
     b = Booking() 
     b.save() 

... 이런 테스트와 그래서 ... 나는 예외를 던질 저장 기대했다. 그러나 그렇지 않습니다. 공백의 이름 (Postgres와 SQLite3)으로 새로운 레코드를 만드는 것은 꽤 행복합니다.

관리자 인터페이스를 통해 실제로 "이 입력란은 필수 입력란"으로 저장에 실패합니다.

질문은 다음과 같습니다

  1. 는 형태로 적용 속성 '빈'인가?
  2. save() 메서드를 재정 의하여 len (name)! = 0을 명시 적으로 확인하는 수정이 있습니까?
  3. 내가 이해 한 바가 내 오해를 푸는 데 오해 한 적이 있습니까? Django Docs에서
+0

제목에 대한 대답은 "아니오"입니다. 모델에서 유효한 데이터를 추정하고 양식에 유효성을 위임하는 것이 일반적인 관행 인 것으로 보입니다. –

+0

http://stackoverflow.com/questions/6940499/how-can-you-create-a-non-empty-charfield-in-django –

답변

5

UPDATE를 : 최근 장고 버전의 model validation documentation를 참조하십시오.

원래 응답 : blank=True/False only applies to forms. 현재 데이터 유효성 검사는 양식 수준에서만 발생합니다. model-validation Google Summer of Code work이 트렁크에 병합되면 변경됩니다.

현재 모델 계층에서 발생하는 유일한 종류의 유효성 검사는 가져 오는 데이터를 처리 할 수없는 경우 데이터베이스 백엔드에서 발생하는 모든 오류입니다. 빈 CharField의 경우에는 Django가 기본적으로 필드를 빈 문자열로 설정하므로 일반적으로 데이터베이스에서 오류가 발생하지 않습니다.

지금은 원하는 모든 모델 수준 유효성 검사에 save() 메소드를 사용해야합니다. 곧 (트렁크에 있다면) 또는 1.2가 나오면 모델 확인 작업을하십시오.

+1

이것은 이전 답변과 같지만 여전히 관련성이있는 것 같습니다. 여기에 무슨 일이 일어 났습니까? – Lucretiel

+0

최근 스레드 : https://stackoverflow.com/questions/17816229 – texnic

1

:

은 "그 빈 문자열 값을 참고 항상하지 NULL로, 빈 문자열로 저장받을 것 만 같은 정수, 부울 및 날짜와 같은 문자열이 아닌 필드에 대한 진정한 = null을 사용합니다.. "

코드에 빈 문자열이 저장됩니다. 이를 설명하기 위해

, 시도 :

class SimpleTest(TestCase): 
    def test_booking_save(self): 
     b = Booking() 
     b.name = None 
     b.save() 
+0

맞지만 질문 된 질문에 대답하지 않습니다. –

+3

예, 실제로 빈 문자열을 저장하고 있습니다. 그것이 문제이다. 'blank'가 'False'로 설정되어 있으므로이를 방지 할 것으로 예상됩니다. –

관련 문제