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

Ron*_*Ron 57 database django django-models

我试着得到一个不同的外键列表,我写了这个:

my_ids = Entity.objects.values('foreign_key').distinct()
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Ron*_*Ron 48

多数民众赞成!两种解决方案都不会100%工作......但我将它们结合起来:)

将参数传递给不同的MySQL数据库(afaik)

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

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

但无论如何,谢谢:)

  • 我在Postgres9.1数据库上有同样的问题,Django == 1.5.5.添加order_by帮助 - 愚蠢...... (6认同)

Fil*_*vić 41

也许你可能想要这样:

Entity.objects.order_by().values_list('foreign_key', flat=True).distinct()
Run Code Online (Sandbox Code Playgroud)

  • 错误.在没有order_by('foregin_key')的情况下使用时不会工作.例如在M2M上(postgres,django 1.8) (11认同)

Sar*_* Ak 25

Entity.objects.values_list('foreign_key', flat=True).distinct().order_by()
Run Code Online (Sandbox Code Playgroud)

明显无法按顺序运行

order_by()调用中使用的任何字段都包含在SQL SELECT列中.当与distinct()一起使用时,这有时会导致意外结果.如果您按相关模型中的字段进行排序,则这些字段将添加到选定的列中,否则可能会使重复的行显示为不同.由于额外的列不会出现在返回的结果中(它们仅用于支持排序),因此有时看起来会返回非独特的结果.

同样,如果使用values()查询来限制所选列,则仍将涉及任何order_by()(或默认模型排序)中使用的列,这可能会影响结果的唯一性.

这里的道德是,如果你使用distinct(),请注意相关模型的排序.类似地,当同时使用distinct()和values()时,在按值()调用的字段排序时要小心.

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

  • 我的天啊!奖励:`order_by()` 并没有真正排序,而是解决了不同的问题。这太疯狂了。 (2认同)

Bur*_*lid 5

Entity.objects.order_by('foreign_key').distinct('foreign_key')
Run Code Online (Sandbox Code Playgroud)

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