0

我有一个带有图片库标签的数据库。它们包含字段“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 %}

这给了我一长串“:”符号,但它的右侧或左侧没有。这向我表明我的列表中有东西,但我似乎无法使用它。我究竟做错了什么?

编辑:值得注意的是,我尝试在 Shell 中做这些事情,当在那里打印标签时,我得到了一个看似由 id 和标签组成的对象列表,但我似乎仍然无法在模板中输出它。

4

1 回答 1

2

values_list将创建一个元组列表,而不是字典,因此使用字典表示法将不起作用。查看文档:

...而不是返回一个字典列表,它返回一个元组列表。每个元组包含传递给 values_list() 调用的各个字段的值——所以第一项是第一个字段,等等。例如:

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

所以,你应该这样做:

{% for tag in tags %}
    <p>{{ tag.0 }}: {{ tag.1 }}</p>
{% endfor %}
于 2012-08-03T12:17:28.573 回答