2012-06-26 3 views
1

Model.full_cleanclean_fields에 대해 clean 전에 호출해야하는 이유가 있습니까?Model.full_clean에서 깨끗하게하기 전에 clean_fields가 호출되는 이유는 무엇입니까?

class MyModel(models.Model): 
    status = models.IntegerField(blank=False, null=False) 

    def clean(self): 
     if not self.status: 
      self.status = 0 

full_clean에서이 순서를 변경하는 어떤 문제가 있을까 : 내가 처음이 상황에서 같은, 다음 clean_fields 물건을 검증하기 위해 내 검증을 할 수 있다면 내 프로젝트에서 , 그것은 더 합리적인 것입니까?

답변

4

"더 합리적인"이유는 무엇입니까? 이름에서 알 수 있듯이 clean_fields은 각 필드를 개별적으로 지우도록 설계되었으며 clean의 목적은 필드 상호 작용을 검증하는 것입니다. 예를 들어, 다른 필드가 설정되어있는 경우에만 한 필드를 비워 둘 수 있습니다. clean_fields 메소드가 먼저 호출되어 이러한 상호 작용의 유효성을 실제로 확인할 수 있습니다. 필드에 일반적으로 오류가있는 경우 함께 유효성을 검사하는 것은 의미가 없습니다.

+0

필드를 null이 아닌 것으로 선언하면 필드 상호 작용의 유효성을 검사하기 위해'clean'을 실행하기 전에 예외가 발생합니다. – zVictor

+0

나는이 질문을 편집했는데, 지금은 더 분명했을 것이다. – zVictor

+3

그것은 깨끗한 목적이 아닙니다. 기본값을 제공하려면'default' kwarg를 사용하십시오. 'status = models.IntegerField (빈 = 거짓, 널 = 거짓, 기본값 = 0)' –

관련 문제