2012-12-29 69 views
0

我想在Django中使用forms.MultipleChoiceField和form.is_valid返回True,但在我的views.py中的查詢返回「匹配查詢不存在」。在Django MultipleChoiceField不工作

forms.py:

LIST_INTERESTS = (
    ('Energy', 'Energy'), 
    ('Business', 'Business'), 
    ('Social', 'Social'), 
    ('Mobile', 'Mobile'), 
) 
interests = forms.MultipleChoiceField(choices=LIST_INTERESTS, initial='Energy') 

views.py:

temp_interests = list(form.cleaned_data['interests']), 
for i in temp_interests: 
    b = Interests.objects.get(val=i) 

...這時它會抱怨的東西匹配查詢不存在。有任何想法嗎?

獎金信息:

當我插入temp_interests到debug.html:

{% for i in temp_interests %} 
    {{ i }}<br> 
{% endfor %} 

它返回[u'Answer 1' ,u'Answer 2' ]

+0

您模型文件? –

+0

告訴我們'興趣'模型 – Amyth

+0

如果你沒有模型。只需使用「form.as_p」來顯示錶單 –

回答

0

問題位於此線上:

b = Interests.objects.get(val=i) 

get()方法。

我不確定你想在這裏實現什麼。但是get()方法所做的是使用傳遞的參數返回一個匹配查詢。如果使用傳遞的參數無法找到任何對象,則會引發DoesNotExist異常,這就是您的情況。

[注意:另外,確保在根據傳遞的參數確定只存在一個對象時使用get()。如果你不知道,你可以使用filter()方法,它返回給定查詢匹配的所有對象的列表。]

你需要確保存在一個Interest對象,其中val屬性等於你的價值通過。所以在上述情況下,沒有Interest對象,其中val等於i的值,因此引發異常。

要調試上面可以如下添加一個print語句:

temp_interests = list(form.cleaned_data['interests']), 
for i in temp_interests: 
    print i # Debug 
    b = Interests.objects.get(val=i) 

,並檢查服務器,看看哪些value異常被上調。

0

如果Interests是一個模型,你可以試試這個使用ModelMulitpleChoiceField代替:

interests = forms.ModelMultipleChoiceField(queryset=Interests.objects.all()) 

通過這種方式,在interests場被從Interests模型,而不是一個列表的實際對象填充