2014-01-18 86 views
3

我正嘗試使用Django創建一個聯繫人管理器。我用下面的代碼創建了一個表單:獲取django格式的對象列表

class ContactForm(forms.ModelForm): 
    first_name = forms.CharField(max_length=20, help_text="First name") 
    last_name = forms.CharField(max_length=20, help_text="Last name") 
    email = forms.CharField(max_length=100, required=False, help_text="Email") 
    phone = forms.CharField(max_length=15, required=False, help_text="Phone") 
    company = forms.ChoiceField(widget=forms.Select, choices=Company.objects.all(), required=False, help_text="Company") 

    class Meta: 
     model = Contact 
     fields = ('first_name', 'last_name', 'email', 'phone', 'company') 

我在公司領域遇到問題。我不知道如何將所有公司的列表傳遞給窗體,以便它可以在html中顯示爲選擇標記。我相信我必須將其轉換爲字典,以便「選擇」論證可行,但我不知道如何去做。

回答

3

使用ModelChoiceField

company = forms.ModelChoiceField(queryset=Company.objects.all(), required=False, help_text="Company") 
+0

這也適用,但LuRsT提供的解決方案可讓您選擇使用PK,因此如果我將它用作編輯表單,表單將選擇實例的值,這正是我真正想要的。我相信我應該問得更好。不管怎麼說,還是要謝謝你! – angardi

+1

事實上,在與LuRsT提供的答案有一些問題後,我再次嘗試這一個,它工作得很好! – angardi

0

您需要將元組或列表2元組傳遞給choices kwarg。

https://docs.djangoproject.com/en/dev/ref/forms/fields/#django.forms.ChoiceField.choices

試試這個:

company = forms.ChoiceField(widget=forms.Select, choices=Company.objects.all().values_list(pk, name), required=False, help_text="Company") 

https://docs.djangoproject.com/en/dev/ref/models/querysets/#values-list

+0

它的工作就好了!謝謝! – angardi

+0

@angardi歡迎您,您能否將我的答案標記爲解決方案,以便問題關閉?謝謝 – LuRsT

+0

我有一些代碼問題,起初它似乎工作,因爲它給了我的名單,並從下拉列表中選擇了正確的選項,但是當我試圖保存表單時,我得到一個錯誤,說我選擇的公司並不存在。這在Omid Raha的回答中不會發生。 – angardi