2014-12-06 69 views
0

我創建了一個具有2個單選按鈕(男/女)的表單。在它下面將有一個名字和姓氏的輸入框。如果我使用formset複製表單,它將包含每個輸入框的單選按鈕,我想排除這一點。假設一旦用戶選擇「男性」,名字應該與他們的性別選擇匹配。Django Formset自定義字段排除

輸出應該像這樣:

ØØ男女

名字:_______________姓:_______________

名字:_______________姓:_______________

...

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。

它並沒有真正意義的使用重複的表單類,然後破解它以不同方式對待第一個。

或者,如果這是一個數據問題(說傳統接口),以及形式需要包含兩個..然後你可能隱藏所有其他元素,並使用JavaScript來填補隱藏的性別選擇。

真的不過,你應該使用FormFormSet

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

好一點。我忽略了這種可能性。謝謝! – dreamzboy 2014-12-08 19:01:50