我尝试获取不同外键的列表,我写了这个:
my_ids = Entity.objects.values('foreign_key').distinct()
但我只得到一个 UNDISTINCT 外键列表......我错过了什么?
谢谢!
我尝试获取不同外键的列表,我写了这个:
my_ids = Entity.objects.values('foreign_key').distinct()
但我只得到一个 UNDISTINCT 外键列表......我错过了什么?
谢谢!
将参数传递给 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
如 Django 文档中所解释的那样,order_by
没有就无法工作:
调用中使用的任何字段
order_by()
都包含在 SQLSELECT
列中。与 结合使用时,这有时会导致意外结果distinct()
。如果您按相关模型中的字段排序,这些字段将添加到选定的列中,否则它们可能会使重复的行看起来不同。由于额外的列不会出现在返回的结果中(它们只是为了支持排序),因此有时看起来返回的结果不明显。同样,如果您使用
values()
查询来限制选定的列,任何order_by()
(或默认模型排序)中使用的列仍将被涉及,并可能影响结果的唯一性。这里的寓意是,如果您正在使用,请
distinct()
注意按相关模型排序。同样,在使用distinct()
andvalues()
时,在按不在values()
调用中的字段排序时要小心。
Entity.objects.order_by('foreign_key').distinct('foreign_key')
如果您已经将它们作为列表,则将其转换为 aset()
以获取不同的值。