2012-01-05 3 views
0

Django에서 나는 깨끗한 함수를 가진 폼 클래스를 가지고있다. 이 정리 기능에서 선택 상자가 채워 졌는지 확인합니다.Django 폼 클린 함수에서 어떻게 선택적 필드가 채워 졌는지 확실하게 테스트 할 수 있습니까?

def clean_session_1(self): 
    # Check if session_1 is filled out. 
    if self.cleaned_data['session_1']: 
     # more validation 
    return self.cleaned_data['session_1'] 

선택 상자가 채워진 경우 필드의 유효성 검사가 계속됩니다.

어떤 이유로이 코드는 필드가 채워 졌는지 여부를 테스트하지 않으며 매번 "추가 유효성 검사"를 실행합니다.

이 필드 "session_1"이 채워지는지 어떻게 안정적으로 테스트 할 수 있는지 궁금합니다. 감사!

+2

: 언제 당신이 주를 사용해야합니다, 양식에서 두 개 이상의 필드에 접근 할 필요가 'clean' 메쏘드. 'clean_FOO'는 그 하나의 필드에 대해서만 신뢰성있게 접근 할 수 있습니다. –

답변

1

self._raw_value('key')에 액세스하여 양식 입력란 (즉, 텍스트 일 ​​뿐이며 파이썬 개체로 처리되지 않음)에서 원시 입력을 가져옵니다.

업데이트 : Ahsan이 말한대로 clean 방법으로 해보세요. 아마 수퍼 클래스 clean 메소드를 호출해야합니다.

+0

폼이'forms.Form' 서브 클래스 인 경우 슈퍼 클래스 클린 메소드를 호출 할 필요가 없습니다. 문서의 [예제] (https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other)에 없습니다. . – Alasdair

+0

@Alasdair : 물론, forms.Form이 변경되지 않는 경우 또는 일반적인 기능이 공통 수퍼 클래스에 포함되는 경우. 물론, 질문은 기본 클래스를 언급하지 않습니다. – Marcin

+0

이론상 그렇습니다. 실제로'forms.Form' clean 메소드는 변경되지 않을 것입니다. 이것은 폼 api를 깨뜨리기 때문입니다. 문서화되지 않은 내부 'self._raw_value'내부에 접근하는 것은 미래에 문제를 야기 할 가능성이 훨씬 더 높습니다. – Alasdair

0

당신은 폼의 청소 방법을 확인할 수 있습니다

답변 아래 의미하지만, 명시 적으로 상태를하지 않는
def clean(self): 
    data = self.data # data contains all fields, optional or required both 
    optional_field = data.get('optional_field', None) 
    # more validation 
    return optional_field 
+0

'self.cleaned_data' 대신'self.data'에 액세스하는 이유는 무엇입니까? Input이 유효하지 않은 경우를 제외하고'required = False' 옵션 필드는 두 필드 모두에 존재합니다. – Alasdair

관련 문제