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