2011-11-12 66 views
0

我有一個通用的領域訪問通用表單域模板

forms.py

class OfferForm(forms.ModelForm): 
     class Meta: 
      model=Offer 

some_views.py形式

def add_field(request): 
     form = OfferForm() 
     #some logic here 
     for x in list: 
       form.fields[x]=forms.ModelChoiceField(queryset=some_query) 
     return render_to_response(template,{'form':form,'list_of_add_field':list} 

所以,在我的模板我想做的事像這樣:

{%for x in list_of_add_field%} 
Name add field is {{x}} 
Choices: 
{%for y in form.{{x}}.choices %} 
    <input type="checkbox" name="form.{{x}}.html_name">y </input> 
{%endfor%} 
{%endfor%} 

怎麼辦?任何想法 ? 謝謝!

+1

您想做什麼?你認爲什麼是「列表」?你爲什麼要在你的視圖中定義表單域,而不是在你的forms.py中。你爲什麼不用django的方法在模板中顯示錶單 –

+0

爲什麼在視圖中定義表單域?好的,我需要像http://www.b-list.org/weblog/2008/nov/09/dynamic-forms/這樣的動態表單,因爲我需要添加各種選項來提供取決於「list」包含的內容。 –

回答

0

我看到你打算做,在這裏我的答覆。你應該調整你的代碼到django而不是django到你的代碼。這樣,爲了解決你的問題,'前綴'表格資源是正確的選擇:

你可以在一個標籤中放入幾個Django表單。爲了讓每一個形成了自己的命名空間,使用前綴關鍵字參數:

>>> mother = PersonForm(prefix="mother") 
>>> father = PersonForm(prefix="father") 
>>> print mother.as_ul() 
<li><label for="id_mother-first_name">First name:</label> <input type="text" name="mother-first_name" id="id_mother-first_name" /></li> 
<li><label for="id_mother-last_name">Last name:</label> <input type="text" name="mother-last_name" id="id_mother-last_name" /></li> 
>>> print father.as_ul() 
<li><label for="id_father-first_name">First name:</label> <input type="text" name="father-first_name" id="id_father-first_name" /></li> 
<li><label for="id_father-last_name">Last name:</label> <input type="text" name="father-last_name" id="id_father-last_name" /></li> 

在你的情況,你可以做一個新的形式爲您的列表中的每個X。將所有新的表單放在一個名爲formset的列表中。然後,在您的模板中,您應該寫入表單循環:

{{for form in formset}} 
    ... Here your code for a form ....