在django中获取具有distinct()的对象列表

时间:2012-08-03 12:11:03

标签: django distinct

我有一个带有图片库标签的数据库。它们包含字段'id','picture_id'和'tag'。我正在尝试构建所有标记的列表,但没有列出相同的标记两次。我知道我可以在查询集中使用distinct(),但是使用all()只会抛出一个错误,告诉我后端数据库不支持它。 (我正在使用MySQL)。

如果我使用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)'''符号,但是它的右侧或左侧都没有。这向我表明我的列表中有东西,但我似乎无法使用它。我做错了什么?

编辑:值得注意的是,我尝试在Shell中执行这些操作,在打印标签时,我得到一个看似包含id和tag的对象列表,但我似乎仍然无法将其输出到模板。

1 个答案:

答案 0 :(得分: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 %}