2014-12-06 2 views
0

두 개의 라디오 버튼 (Male/Female)이있는 양식을 만들었습니다. 아래에는 이름 및 성 입력란이 있습니다. 양식을 복제하기 위해 formset을 사용하면 모든 입력 상자에 대한 라디오 버튼이 포함되며이를 제외하고 싶습니다. 사용자가 "남성"을 선택하면 이름이 성별 선택과 일치해야한다고 가정합니다. 그래서 같이한다Django Formset 사용자 정의 필드 제외

출력 :

O 남성 O 여성

이름 : _______________ 성 : _______________

이름 : _______________ 성 : _______________

...

forms.py 

from django import forms 


class NameForm (forms.Form): 
    GENDER = (
     ('Male', 'Male'), 
     ('Female', 'Female') 
    ) 

    gender = forms.ChoiceField (widget = forms.RadioSelect, choices = GENDER) 
    first_name = forms.CharField (max_length = 20) 
    last_name = forms.CharField (max_length = 20) 


Shell Output: 
>>> from django.forms.formsets import formset_factory 
>>> from nameform.forms import NameForm 
>>> 
>>> NameFormSet = formset_factory (NameForm, extra = 2) 
>>> formset = NameFormSet() 
>>> for form in formset: 
...  print (form.as_table()) 
... 
<tr><th><label for="id_form-0-gender_0">Gender:</label></th><td><ul id="id_form-0-gender"> 
<li><label for="id_form-0-gender_0"><input id="id_form-0-gender_0" name="form-0-gender" type="radio" value="Male" /> Male</label></li> 
<li><label for="id_form-0-gender_1"><input id="id_form-0-gender_1" name="form-0-gender" type="radio" value="Female" /> Female</label></li> 
</ul></td></tr> 
<tr><th><label for="id_form-0-first_name">First name:</label></th><td><input id="id_form-0-first_name" maxlength="20" name="form-0-first_name" type="text" /></td></tr> 
<tr><th><label for="id_form-0-last_name">Last name:</label></th><td><input id="id_form-0-last_name" maxlength="20" name="form-0-last_name" type="text" /></td></tr> 
<tr><th><label for="id_form-1-gender_0">Gender:</label></th><td><ul id="id_form-1-gender"> 
<li><label for="id_form-1-gender_0"><input id="id_form-1-gender_0" name="form-1-gender" type="radio" value="Male" /> Male</label></li> 
<li><label for="id_form-1-gender_1"><input id="id_form-1-gender_1" name="form-1-gender" type="radio" value="Female" /> Female</label></li> 
</ul></td></tr> 
<tr><th><label for="id_form-1-first_name">First name:</label></th><td><input id="id_form-1-first_name" maxlength="20" name="form-1-first_name" type="text" /></td></tr> 
<tr><th><label for="id_form-1-last_name">Last name:</label></th><td><input id="id_form-1-last_name" maxlength="20" name="form-1-last_name" type="text" /></td></tr> 

답변

0

양식 및 formset. 이름 만 포함하는 양식, 반복되는 요소가 포함 된 formset.

반복적 인 형식 클래스를 사용한 다음 첫 번째 다차원을 다르게 해킹하기 위해 해킹하는 것은 실제로 의미가 없습니다.

데이터 문제 (예 : 레거시 인터페이스)가 있고 양식에 두 가지 모두가 들어 있어야하는 경우 숨겨진 성별을 채우기 위해 다른 요소를 모두 숨기고 자바 스크립트를 사용할 수 있습니다.

그래도 실제로는 FormFormSet을 사용해야합니다.

{{ form.as_p }} 
{% for form in formset %} 
    {{ form.as_p }} 
{% endfor %} 
+0

좋은 지적. 나는 그 가능성을 간과했다. 고맙습니다! – dreamzboy