django值列表只获取一次值

时间:2015-04-02 17:23:31

标签: django distinct django-queryset

我想要一个包含来自查询集的值的列表,该列表只出现一次。

我看过this post,但这似乎对我不起作用。

示例:

CharacterJournal.objects.order_by("date").values_list("reftypeid", flat=True).distinct()

返回类似这样的内容:

[97, 96, 97, 97, 97, 97, 97, 97, 42, 42, 42,  52, 42, 42, 1, 42, '...(remaining elements truncated)...']

请帮忙。

1 个答案:

答案 0 :(得分:3)

请参阅distinct [1]文档中的说明:

  

order_by()调用中使用的任何字段都包含在SQL SELECT列中。当与distinct()一起使用时,这有时会导致意外结果。如果您按相关模型中的字段进行排序,则这些字段将添加到选定的列中,否则可能会使重复的行显示为不同。由于额外的列没有出现在返回的结果中(它们仅用于支持排序),因此有时看起来会返回非独特的结果。

     

同样,如果使用values()查询来限制所选列,则任何order_by()(或默认模型排序)中使用的列仍将涉及,并可能影响结果的唯一性。

换句话说,因为您按date排序,所以查询返回(date, reftypeid)对,并在此对上执行DISTINCT子句。由于datevalues_list稍后被删除,但没有额外删除重复的reftypeid条目。