2010-07-25 2 views
3

환상적인 인라인 모델 formsets 덕분에 장고에 나는 4 개의 인라인 formsets와 꽤 고급 양식이 있습니다. 템플릿에서 각 formset을 탭에 표시합니다. 모든게 정말 매끄러운 작동하지만 그 탭의 formset 전혀 유효성 검사 오류가있는 경우 빨간색 탭을 채색하고 싶습니다. 그래서 나는이 시도 :서식 파일에서 서식 집합에 오류가있는 경우 어떻게 발견합니까?

<div id="tabs"> 
    <ul> 
     <li><a href="#foo-tab"{% if forms.FooFormSet.errors %} class="error"{% endif %}>Foo</a></li> 
     <li><a href="#bar-tab"{% if forms.BarFormSet.errors %} class="error"{% endif %}>Bar</a></li> 
     <li><a href="#zoo-tab"{% if forms.ZooFormSet.errors %} class="error"{% endif %}>Zoo</a></li> 
     <li><a href="#doo-tab"{% if forms.DooFormSet.errors %} class="error"{% endif %}>Doo</a></li> 
    </ul> 

    <div id="foo-tab"></div> 
    <div id="bar-tab"></div> 
    <div id="zoo-tab"></div> 
    <div id="doo-tab"></div> 
</div> 

을하지만 형태 때문에 일을 나던 * Set.errors은 [{}, {}, {}] (등 (그래서 항상 true를 반환합니다) 빈 dictionarys와 목록입니다. formsets에있는 양식의 양은 formset.errors에있는 빈 사전의 양입니다.

하나의 솔루션 BaseInlineFormSet을 하위 클래스로 추가하고 has_errors 메소드를 추가하거나 모든 하위 세트를 하위 클래스로 사용할 수 있습니다. 다른 제안? 고마워요!

답변

5

formset의 방법 is_valid의 결과를 확인할 수 있습니다. 유효 기간 : {% if forms.FooFormSet.is_valid %}.

양식이 이미 유효성 검사를 거친 경우 성능에 전혀 영향을 미치지 않으면 안된다 (데이터베이스에 손도 대지 않고 양식의 유효성을 다시 검사하지 않음).

+0

감사! 폼이 아직 게시되지 않은 경우 is_valid가 반환 될 것이지만 나는 is_post를 할당하여이 문제를 해결할 수 있습니다 : 컨텍스트 또는 무언가를 가진 사실 – Andreas

+0

@Andreas : 흠, 좋은 지적입니다. 나는 확실히 생각하지 않았습니다. 하나. 그러나'not is_bound 또는 is_valid' 검사를 할 수 있습니다. formset/form이 어떤 데이터도없이 초기화되면'is_bound'는'False'입니다. ('initial'은 계산되지 않습니다.) - 정확히 "form is post yet"라고 부르는 것입니다. – shylent

+2

is_valid가 아니고 is_bound가 저에게 해 주셨습니다. 감사합니다! – Andreas