2012-08-03 53 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

相关问题