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

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

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

但是我得到的只是UNDISTINCT外键列表…我错过了什么?

谢谢!

也许你可能想要这样做:

 Entity.objects.order_by().values_list('foreign_key', flat=True).distinct() 

这是提示! 这两个解决scheme不会工作100%…但我把它们合并:)

将parameter passing给distinct不适用于MySQL数据库(afaik)

这个工作并返回一个对象:

Entity.objects.order_by('foreign_key').values('foreign_key').distinct()

不过谢谢:)

 Entity.objects.values_list('foreign_key', flat=True).distinct().order_by() 

明显不能与外出工作

任何在order_by()调用中使用的字段都包含在SQL SELECT列中。 当与distinct()一起使用时,有时会导致意想不到的结果。 如果您通过相关模型的字段进行sorting,则这些字段将被添加到选定的列中,并且可能会使重复的行看起来不同。 由于额外的列不会出现在返回的结果中(它们只是在那里支持sorting),它有时看起来像是返回不同的结果。

同样,如果使用values()查询来限制所选列,那么在任何order_by()(或默认模型sorting)中使用的列仍将涉及,并可能影响结果的唯一性。

这里的道德是,如果你使用distinct()要小心有关的模型sorting。 类似地,当将distinct()和values()一起使用时,请在不按values()调用的字段sorting时小心。

https://docs.djangoproject.com/en/dev/ref/models/querysets/#distinct

 Entity.objects.order_by('foreign_key').distinct('foreign_key') 

如果您已经将它们作为列表,则将其转换为set()以获取不同的值。