2011-01-25 79 views
15

我在forms.py的形式,看起來像這樣:填充與數據庫中的數據Django的形式鑑於

from django import forms 

class ItemList(forms.Form): 
    item_list = forms.ChoiceField() 

我需要從數據庫中的一些數據來填充item_list。當HTML生成item_list應該是這樣的:

<select title="ItemList"> 
    <option value="1">Select Item 1</option> 
    <option value="2">Select Item 2</option> 
</select> 

的選項值在我的select語句幾乎每一次改變,因爲在查詢中會經常改變產生新的結果的變量。

我需要在view.py中放置什麼,還需要在我的模板文件中使用數據庫中的值填充ItemList?

回答

25

採取Django文檔中看看這個例子:

基本上,你可以使用queryset關鍵字參數Field對象上,以從數據庫中抓取行:

class BookForm(forms.Form): 
    authors = forms.ModelMultipleChoiceField(queryset=Author.objects.all()) 

更新

如果你需要一個動態模型選擇字段,您可以交出你的項目編號形式的構造函數,並相應地調整查詢集:

class ItemForm(forms.Form): 

    # here we use a dummy `queryset`, because ModelChoiceField 
    # requires some queryset 
    item_field = forms.ModelChoiceField(queryset=Item.objects.none()) 

    def __init__(self, item_id): 
     super(ItemForm, self).__init__() 
     self.fields['item_field'].queryset = Item.objects.filter(id=item_id) 

附:我沒有測試過這個代碼,我不確定你的確切設置,但我希望主要想法能夠實現。

資源:

+0

的問題是,我所有的邏輯在view.py發生不是在forms.py。查詢集看起來更像這個Items.objects.filter(item_id = id)。 「id」變量在view.py中生成。 – avatar 2011-01-25 02:54:08