2012-08-03 52 views
0

我有一個包含圖片庫標籤的數據庫。它們包含'id','picture_id'和'tag'字段。我正在嘗試構建所有標記的列表,但沒有列出兩次相同的標記。我知道我可以在queryset中使用distinct(),但在all()中使用this只會引發錯誤,告訴我後端數據庫不支持它。 (我正在使用MySQL)。在django中使用distinct()獲取對象列表

如果我使用values_list('id','tag'),我不會得到那個錯誤。我根本沒有得到任何錯誤。但是我沒有得到任何我可以在我的模板中打印出來的東西。

該查詢集是這樣寫的:

tags = Tag.objects.values_list('id', 'tag').distinct().order_by('tag') 

在模板我可以嘗試與打印:

{% for tag in tags %} 
    <p>{{ tag.id }}: {{ tag.tag }}</p> 
{% endfor %} 

這給我的長(ISH)行 ':' 跡象,但在其右側或左側沒有任何東西。這表明我的清單中有東西,但似乎無法使用它。我究竟做錯了什麼?

編輯:值得注意的是,我試圖在殼牌中做這些事情,當打印出標籤時,我得到了一個對象列表,看起來似乎由id和標籤組成,但我仍然無法得到它的輸出在模板中。

回答

2

values_list將創建元組列表,而不是字典,因此使用字典符號將不起作用。 Check out the the docs:

...不是返回一個字典列表,而是返回一個元組列表。每個元組包含來自傳入values_list(各領域)值調用 - 所以第一項是第一個字段等等。例如:

>> Entry.objects.values_list('id', 'headline') 
[(1, u'First entry'), ...] 

所以,相反你應該做的:

{% for tag in tags %} 
    <p>{{ tag.0 }}: {{ tag.1 }}</p> 
{% endfor %} 
+0

這解決了我的問題,無法看到帖子,所以謝謝!當我可以(6分鐘)時,我會將其標記爲可接受的答案,但我似乎仍然無法使用不同的方式來清除獨特的標籤,並且也能夠使用'id'。你知道有一種方法可以做到這一點,或者是在將視圖發送到模板之前手動在views.py中創建列表或其他東西的唯一方法嗎? – 2012-08-03 12:20:59

+0

你在調用'distinct()'還是'distinct('tag')'?後者可能由於錯誤而導致錯誤:https://code.djangoproject.com/ticket/17974 – 2012-08-03 12:28:13

+0

我知道使用不同的('tag')後面的錯誤。我認爲問題在於,有了values_list('id','tag'),然後做一個distinct(),然後可以查看id和tag的獨特組合,這當然會永遠是唯一的。 – 2012-08-03 12:34:27