Django模型 - 获取不同的值列表

时间:2012-06-01 10:44:12

标签: database django django-models

我尝试获取不同外键的列表,我写了这个:

my_ids = Entity.objects.values('foreign_key').distinct()

但我只得到一份UNDISTINCT外键列表......我错过了什么?

谢谢!

4 个答案:

答案 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()以获取不同的值。