2

我不明白为什么 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 列的不同应该只返回一个恕我直言。

4

1 回答 1

0

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

您的 PropTelephone 的默认模型排序是否可能包含比 tel_number 更多的列?

于 2013-08-30T07:28:09.270 回答