我不明白为什么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` = '' ))
从dbshell启动的查询只返回一条记录
+-------------------------------+
| TEL_NUMBER |
+-------------------------------+
| 0410224291 |
+-------------------------------+
那么为什么django会为这样的查询返回两个相同的记录? DB中的当前存在两条记录,其他列中的值不同。 但是对于列tel_number不同,应该只返回一个恕我直言。
答案 0 :(得分:0)
以下是文档https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.distinct的引用: “同样,如果使用values()查询来限制所选列,则任何order_by()(或默认模型排序)中使用的列仍将涉及并可能影响结果的唯一性。”
您的PropTelephone是否可能有默认的型号订购,其中包含的列数多于tel_number?