【发布时间】:2012-06-06 14:35:34
【问题描述】:
我尝试获取不同外键的列表,然后我写了这个:
my_ids = Entity.objects.values('foreign_key').distinct()
但我只得到一个 UNDISTINCT 外键列表...我错过了什么?
谢谢!
【问题讨论】:
标签: database django django-models
我尝试获取不同外键的列表,然后我写了这个:
my_ids = Entity.objects.values('foreign_key').distinct()
但我只得到一个 UNDISTINCT 外键列表...我错过了什么?
谢谢!
【问题讨论】:
标签: database django django-models
将参数传递给 distinct 不适用于 MySQL 数据库 (AFAIK)
这个工作并且只返回一个对象:
Entity.objects.order_by('foreign_key').values('foreign_key').distinct()
【讨论】:
也许你可能想这样做:
Entity.objects.order_by().values_list('foreign_key', flat=True).distinct()
【讨论】:
Entity.objects.values_list('foreign_key', flat=True).distinct().order_by()
distinct 不适用于 out order by
在 order_by() 调用中使用的任何字段都包含在 SQL SELECT 中 列。这有时会在使用时导致意想不到的结果 与 distinct() 结合。如果您按相关领域的字段排序 模型,这些字段将被添加到选定的列中,并且它们可能 使其他重复的行看起来是不同的。由于额外 列不会出现在返回的结果中(它们只是为了 支持排序),有时看起来不明显的结果是 被退回。
同样,如果您使用 values() 查询来限制列 选中,在任何 order_by() (或默认模型)中使用的列 ordering) 仍然会涉及,并且可能会影响 结果。
这里的寓意是,如果您使用 distinct() 时要小心 按相关型号订购。同样,当使用 distinct() 和 values() 一起,当按不在的字段排序时要小心 values() 调用。
https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct
【讨论】:
order_by() 并没有真正订购,但解决了明显的问题。这简直是疯了。
.order_by() 没有任何参数会清除查询集上的任何默认或现有排序。
Entity.objects.order_by('foreign_key').distinct('foreign_key')
如果您已经将它们作为列表,则将其转换为 set() 以获取不同的值。
【讨论】: