2015-05-29 132 views
2

我正試圖在窗體上設置一個select控件,但未達到預期結果。對我而言,最奇怪的是它在前一個控件中使用同一類型。如何在選擇控制中設置初始值?

這是所涉及的功能:

class ProofMSPE(CrearEvidencia): 
    model = VRL02 
    form_class = VRL02Form 

    def get_form(self, form_class): 
     form = super(ProofMSPE, self).get_form(form_class) 
     form.fields['miembro'].queryset = self.pipol 
     if self.pipol.count() == 1: 
      form.fields['miembro'].widget.initial = [self.pipol[0].id] 
     form.fields['meta'].initial = self.meta 
     form.fields['meta'].widget.attrs['disabled'] = True 
     return form 

meta的控制是select和我得到了預期的行爲,即自動選擇爲初始值(form.fields['meta'].initial = self.meta在礦井下一行,它禁用(form.fields ['meta']. widget.attrs ['disabled'] = True)。這是在渲染模板輸出:

<!-- begin meta--> 
<div class="row"> 
    <div class="col s12 input-field"> 
    <select id="id_meta" name="meta" disabled> 
     <option value="">---------</option> 
     <option value="1" selected="selected">JOCE-1</option> 
     <option value="2">VEL-1</option> 
     <option value="3">VEL-2</option> 
     <option value="4">VEL-3</option> 
    </select> 
    <label for="id_meta">Evidencia para la meta</label> 
    </div> 
</div> 
<!-- end ./meta --> 

在另一方面,與pipol場我無法得到相同的結果的差異,順便說一句,這個領域有一些邏輯:我得到一個過濾列表的人有相同的標準和小部件創建這個列表(form.fields['miembro'].queryset = self.pipol)。

到目前爲止好,但如果查詢集只有一個結果(if self.pipol.count() == 1 :),我想,這其中用作inital值(form.fields ['member']. Widget.initial = [self .pipol [0] .id]),但是這是行不通的。

這是當模板被渲染看似:

<!-- begin pipol--> 
<div class="row"> 
    <div class="col s12 input-field"> 
    <select id="id_miembro" name="miembro"> 
     <option value="" selected="selected">---------</option> 
     <option value="2">***@***.mx</option> 
    </select> 
    <label for="id_miembro">Seleccione el usuario</label> 
    </div> 
</div> 
<!-- end ./pipol --> 

感謝您的時間。

+0

創建自定義窗口小部件用於此目的(從__django.forms.Select__繼承) – madzohan

回答

2

您必須將初始值設置爲form.field['miembro']而不是小部件,就像您使用form.fields['meta']所做的那樣。

def get_form(self, form_class): 
    form = super(ProofMSPE, self).get_form(form_class) 
    form.fields['miembro'].queryset = self.pipol 
    if self.pipol.count() == 1: 
     # this line here 
     form.fields['miembro'].initial = self.pipol[0] 
    form.fields['meta'].initial = self.meta 
    form.fields['meta'].widget.attrs['disabled'] = True 
    return form 

選擇輸出爲:

<select id="id_miembro" name="miembro"> 
    <option value="">---------</option> 
    <option value="2" selected="selected">***@***.mx</option> 
</select>