Django返回重复项,但来自dbshel​​l的相同查询只返回一条记录

时间:2013-08-28 18:10:13

标签: sql django

我不明白为什么Django会在下面的代码中返回重复项,有人可以解释一下吗? 感谢。

qs = PropTelephone.objects.filter(reference=91811, tel_number__isnull=False).exclude(tel_number='').values_list('tel_number', flat=True).distinct()

print qs
[u'0410224291', u'0410224291']

print qs.query
SELECT DISTINCT `PROP_TELEPHONE`.`TEL_NUMBER` FROM `PROP_TELEPHONE` WHERE (`PROP_TELEPHONE`.`TEL_NUMBER` IS NOT NULL AND `PROP_TELEPHONE`.`REFERENCE` = 91811  AND NOT (`PROP_TELEPHONE`.`TEL_NUMBER` = '' ))
从dbshel​​l启动的

查询只返回一条记录

+-------------------------------+
| TEL_NUMBER                    |
+-------------------------------+
| 0410224291                    |
+-------------------------------+

那么为什么django会为这样的查询返回两个相同的记录? DB中的当前存在两条记录,其他列中的值不同。 但是对于列tel_number不同,应该只返回一个恕我直言。

1 个答案:

答案 0 :(得分:0)

以下是文档https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.distinct的引用: “同样,如果使用values()查询来限制所选列,则任何order_by()(或默认模型排序)中使用的列仍将涉及并可能影响结果的唯一性。”

您的PropTelephone是否可能有默认的型号订购,其中包含的列数多于tel_number?