2011-04-20 9 views
3

는이 같은 코드를 작성하고 싶었다. 장고 코드는 매우 분명하다확인 nullable이 아닌 필드가 null의 경우 (장고)

class ReverseSingleRelatedObjectDescriptor(object): 

    def __get__(self, instance, instance_type=None): 

     ... 

     if val is None: 
      # If NULL is an allowed value, return it. 
      if self.field.null: 
       return None 
      raise self.field.rel.to.DoesNotExist 

나는이 문제가 이전에 제기 된 거의 확신은, 그러나 어떻게 든 내가 특정 유스 케이스와 일치합니다 아무것도 찾을 수 없습니다. 확실한 해결 방법은 당연히 필드를 nullable로 만들지 만 실제로 데이터베이스 스키마에 영향을 미칠 것이라는 것을 이해하고 Django가 제공하는 무결성 검사가 마음에 든다. 또 다른 하나는 예외를 잡아 적절하게 처리하는 것입니다. 그러나 이것은 상용구 코드를 많이 추가합니다. 특히 여러 개의 필드가있는 경우 (각 블록에 대해 별도의 try...except 블록 - 지금은보기 흉한 경우). 너는 무엇을 제안 하겠는가?

편집 : 또 다른 것은 - 그것은 외래 키에 올 때 나는 initial 그러나이 상당히 제한되어 사용할 수 있습니다. 나는 창조의 순간에 갖고 싶은 디폴트의 종류를 항상 알지 못한다. 나는 초기화 단계에서 그것을 알 것이다. 또한 다른 분야의 가치에 의존 할 수 있습니다. 이 속성 세트가있는 경우

답변

10

확인 - 양식 필드를 참조하는

if hasattr(self, 'field', False) 
+2

나는 그것이 'hasattr (자기,'field ')'이어야한다고 생각하지만, 그렇지 않으면 작동한다. 감사. – julkiewicz

+0

hasattr이 2 개의 인수를 가져올 것으로 예상 됨 3 –

0

적절한 방법은 다음과 같이이다 :
self.fields['myfield']
때문에, 귀하의 경우, 널 (null) 검사가이
같이 가야한다 self.fields['myfield'].value is None

다른주의 사항에 따르면, 필드의 이름을 지정하기 위해 'field'와 같은 예약어/예약어를 예약어로 사용하지 마십시오.

+0

'field'라는 단어가 파이썬에서 '예약 됨'인 의미있는 의미를 생각할 수 없습니다. 파이썬에서 객체는 속성과 메소드로 구성됩니다. –

+0

아무것도 실제로 '필드'로 나뉩니다. 하지만 저는 DJango에 대해 이야기하고 있습니다. 여기서 양식은 필드 속성을 가지며 다른 사용자에게 혼동스럽지 않은 사용자 정의 항목을 나타내는 유사한 단어를 다시 사용합니다. 좋음/적절한 변수 이름은 항상 읽고 이해하기 쉽습니다. –

+0

그것은 단지 예일뿐입니다. 내 실제 모델에서 필드 이름은 완전히 다른 것입니다. – julkiewicz

관련 문제