2012-08-13 114 views
10

我在使用ChoiceField創建數據庫中值的下拉列表時遇到問題。下面是代碼Django ChoiceField從數據庫值填充

from django import forms 
from testplatform.models import ServiceOffering 

class ContactForm(forms.Form): 

    subject = forms.ChoiceField(queryset=ServiceOffering.objects.all()) 
    #subject = forms.ModelMultipleChoiceField(queryset=ServiceOffering.objects.all()) 

的#subject ....線工作的片斷,但是當我使用的線ChoiceField(查詢集....)我得到以下錯誤。

__init__() got an unexpected keyword argument 'queryset' 

任何想法?

回答

24

ChoiceField沒有查詢集。您正在尋找ModelChoiceField

+0

優秀在處理什麼 - 那工作一種享受。我在下拉框中獲得一個------作爲默認值。我可以改變它嗎?謝謝! – Oli 2012-08-13 14:47:05

+1

如果以這種方式顯示該字段是否可選,請將表單上的字段設置爲'required = True'以將其刪除。 – 2012-08-13 14:49:56

3

使用ModelChoiceFieldLink Here

ChoiceField不支持查詢集

+0

認真嗎?是否真的有必要通過鏈接和輕微的格式轉換重新發布我的答案? – 2012-08-13 14:48:13

+0

對不起,我打開了答案窗口,併爲此鏈接。一旦我回來,你已經發布了它。再次抱歉。我不知道如何刪除我的回答明確 – 2012-08-13 14:50:54

+0

謝謝 - 得到它..我想我可以使用初始值,所以我沒有看到------出現? – Oli 2012-08-13 14:54:51

5

,如果你想從填充數據庫下拉列表中,我會建議你通過所有單個對象中的值從views.py到您的模板。你可以這樣來做: 1]從數據庫中獲取所有的值:如果你想在下拉列表排序列表

objectlist = ModelName.objects.all() 

,這樣做:

objectlist = ModelName.objects.all().order_by('fieldname') 

如果你想distinctlist,做到這一點:

objectlist = ModelName.objects.distinct('fieldname') 

2]通過這使這個 '鏈表類' 與模板

return render(request, 'template.html', {'objectlist': objectlist}) 

3]在模板中使用選擇標籤,並在用戶循環遍歷對象列表。在選項標籤

<select> 


{% for element in objectlist %} 


<option value={{ element.id }}>{{ element.name }} 



    </select> 

值取決於你需要你的API