2017-06-22 109 views
0
class form(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     user = kwargs.pop('user') 
     u = User.objects.get(user=user) 
     super(form, self).__init__(*args, **kwargs) 

     self.fields['phone'].queryset = Phone.objects.filter(user=u) 

    class Meta: 
     model = MyModel 
     fields = ["name", "description", , "phone"] 

此表單預先填充屬於當前登錄用戶的電話的現場電話。我使用{{form.as_p}}顯示了模板,但我不知道如何在html模板中手動顯示帶有預選手機名稱的字段。通過選擇多個Django中的表單域進行循環選擇

我嘗試下面的代碼片段作爲較大表格的一部分,但它沒有奏效。

<select multiple="multiple" id="id_phone" name="phone" required> 
      {% for p in phone %} 
      <option value="{{ p.id }}">{{ p.name }}</option> 
      {% endfor %} 
</select> 

此外,我怎樣才能讓用戶一次選擇多種手機與這種預填充方法。我試圖使用ModelMultipleChoiceField,但它不起作用。

+0

爲什麼你需要表現出它手動?這是一個什麼樣的領域?當您嘗試使用ModelMultipleChoiceField時,什麼「不起作用」? –

+0

我想手動完成它,以便我可以爲每個輸入和標籤分類,並且能夠按照我的需要進行設計。這是一個選擇字段,它有選項,用戶可以選擇他們想要添加的手機。當我試圖使用ModelMultipleChoiceField時,我只是無法弄清楚如何從self.fields ['phone']傳入queryset。queryset – thatguy

回答

0

還有,你在這種情況下

  1. 田間
  2. 設置字段的控件設置初始值需要能夠選擇多個值

幸運的是,Django的兩件事已經有一個小部件!

下面的代碼將實現你想要什麼:

class form(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     user = kwargs.pop('user') 
     u = User.objects.get(user=user) 
     kwargs["initial"].update({ 
      "phone": Phone.objects.filter(user=u) 
     }) 
     super(form, self).__init__(*args, **kwargs) 

    class Meta: 
     model = MyModel 
     widgets = { 
      "phone": SelectMultiple 
     } 
     fields = ["name", "description", "phone"] 

有了這兩件,模板變得容易!

{{ form.phone.errors }} {# shows on page any errors during clean #} 
{{ form.phone }}   {# renders the widget #} 

如果你不想使用內置的小工具,Django提供,看看creating your own

其他方式來設定初始值結賬this post

+0

kwargs [「initial」]。update是什麼? – thatguy

+0

'initial'是一個被傳遞給'BaseForm'的kwarg,它爲您的表單設置初始值 –

+0

這個答案非常好。你將如何將CSS應用到{{form.phone}} – thatguy

相關問題