django DISTINCT:COUNT vs len

时间:2014-10-26 20:07:03

标签: mysql sql django

我有一个带有一些字段的模型M,其中三个已经定义了排序。让我们称他们为a,b,c。所以我订购了= [“a”,“b”,“c”]。

我的问题是:

n = M.objects.values_list ('a', flat=True).distinct()
n.count() --> 217
len(n) --> 26580

这怎么可能?

我使用Python 2.7,Django 1.6和MySQL。

谢谢!

1 个答案:

答案 0 :(得分:0)

documentation on distinct()解决了这一点:

  

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

如果您使用自己的模型覆盖默认模型排序,它应该有效:

n = M.objects.order_by('a').values_list('a', flat=True).distinct()

(尽管如果a是相关字段,文档中会有更多警告。)