我尝试获取不同外键的列表,我写了这个:
my_ids = Entity.objects.values('foreign_key').distinct()
但我只得到一份UNDISTINCT外键列表......我错过了什么?
谢谢!
答案 0 :(得分:38)
也许您可能想要这样做:
Entity.objects.order_by().values_list('foreign_key', flat=True).distinct()
答案 1 :(得分:38)
这是暗示!两种解决方案都不会100%工作......但我将它们结合起来:)
将参数传递给MySQL数据库的不同功能(afaik)
这个工作并只返回一个对象:
Entity.objects.order_by('foreign_key').values('foreign_key').distinct()
但是,无论如何,谢谢:)
答案 2 :(得分:22)
Entity.objects.values_list('foreign_key', flat=True).distinct().order_by()
明显无法按顺序排除
order_by()调用中使用的任何字段都包含在SQL SELECT中 列。这在使用时有时会导致意想不到的结果 与distinct()结合。如果您按相关字段排序 模型,这些字段将添加到选定的列,他们可能会 否则重复的行似乎是不同的。额外的 列不会出现在返回的结果中(它们只出现在那里) 支持订购),它有时看起来像非截然不同的结果 被退回。
同样,如果使用values()查询来限制列 选中,任何order_by()(或默认模型)中使用的列 订购)仍将涉及并可能影响的独特性 结果
这里的道德是,如果你使用distinct()要小心 按相关型号订购。同样,使用distinct()和 values()在一起,在按字段排序时要小心 values()调用。
https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct
答案 3 :(得分:4)
Entity.objects.order_by('foreign_key').distinct('foreign_key')
如果您已将它们作为列表,则将其转换为set()
以获取不同的值。