2013-06-12 29 views
1

我正在嘗試顯示一堆表單,其中包含一堆字段。我試圖將這些字段組合在一起,以便有一個父字段,然後在父字段下面有一些子字段。我將如何讓Django表單字段有孩子?

因此,我所做的是在我的表單中創建了一個字典,父字段作爲訪問子字段列表的鍵。

這裏是我的形式:

class DetailForm(Form): 
    a = BooleanField(label='a') 
    a1 = BooleanField(label='a1') 

    b = BooleanField(label='b') 
    b1 = BooleanField(label='b1') 
    b2 = BooleanField(label='b2') 

    c = BooleanField(label='c') 
    c1 = BooleanField(label='c1')  
    c2 = BooleanField(label='c2') 
    c3 = ChoiceField(choices=((1,'Default Text'),(0,'Custom Text'),), widget=RadioSelect, label='c3') 

    fields_dict = {a: [a1], 
        b: [b1, b2], 
        c: [c1, c2, c3] 
        } 

這是我的觀點:

def bfa_report(request, template): 
    form = DetailForm() 
    fields_dict = form.fields_dict 
    return render_to_response(template, { 
     'form': form, 
     'fields_dict': fields_dict 
     }, context_instance=RequestContext(request)) 

下面是我在做什麼在我的模板:

<div data-dojo-type="dijit/form/Form" id="parameters_form" data-dojo-id="parameters_form" encType="multipart/form-data" action="" method=""> 
    {% csrf_token %} 
    {% for key, value in fields_dict.items %} 
     <div>{{ key }}</div> 
     <div> 
      {% for val in value %} 
       <div> 
        {{ val }} 
       </div> 
      {% endfor %} 
     </div> 
    {% endfor %} 
</div> 

當我去該頁面,我最終以此顯示在頁面上:

a 
<django.forms.fields.BooleanField object at 0x7f3aa4444cd0> 
b 
<django.forms.fields.BooleanField object at 0x7f3aa4442490> 
<django.forms.fields.BooleanField object at 0x7f3aa4442d90> 
c 
<django.forms.fields.BooleanField object at 0x7f3aa4442e10> 
<django.forms.fields.BooleanField object at 0x7f3aa4442e90> 
<django.forms.fields.ChoiceField object at 0x7f3aa4442f10> 

該字段沒有顯示。我相信有更好的方法來做我想做的事情。我如何獲得按照他們的方式分組的字段?

我正在嘗試創建一個通用模板來執行此操作。我有幾種需要顯示的表單,我不想爲每個表單創建一個單獨的模板。

+0

你不渲染實例化的窗體,但是你正確地聲明瞭你的域字典。 – Jingo

回答

2

問題是,您輸出的字段與任何表單都沒有關聯。

我會建議你創建字典壓倒一切形式的__init__方法:

def __init__(self, *args, **kwargs): 
    super(DetailForm, self).__init__(*args, **kwargs) 
    self.fields_dict = {self['a']: [self['a1']], 
        self['b']: [self['b1'], self['b2']], 
        self['c']: [self['c1'], self['c2'], self['c3']] 
        } 

希望這有助於!

+0

工作正常!謝謝! –

+0

不客氣! –

+0

快速的問題是,當我使用'{%for key,fields_dict.items%中的值'檢索鍵和值時,它們不會按照我希望的順序出現。任何方式來指定一個訂單?謝謝! –

相關問題