首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django模型-获取不同的值列表

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

Stack Overflow用户
提问于 2012-06-01 18:44:12
回答 4查看 60.5K关注 0票数 70

我尝试获取不同外键的列表,并编写了以下代码:

代码语言:javascript
复制
my_ids = Entity.objects.values('foreign_key').distinct()

但我只拿到了一份UNDISTINCT外键的列表...我遗漏了什么?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-01 19:15:29

将参数传递给distinct不适用于MySQL数据库(AFAIK)

这个函数只工作并返回一个对象:

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

票数 64
EN

Stack Overflow用户

发布于 2012-06-01 18:58:04

也许你可能想要这样做:

代码语言:javascript
复制
Entity.objects.order_by().values_list('foreign_key', flat=True).distinct()
票数 57
EN

Stack Overflow用户

发布于 2016-05-04 19:50:30

代码语言:javascript
复制
Entity.objects.values_list('foreign_key', flat=True).distinct().order_by()

distinct不适用于out order by

order_by()调用中使用的任何字段都包含在SQL SELECT列中。当与distinct()一起使用时,这有时可能会导致意外的结果。如果您按相关模型中的字段排序,这些字段将被添加到选定的列中,并且它们可能会使原本重复的行看起来不同。由于额外的列不会出现在返回的结果中(它们只是为了支持排序),所以有时看起来返回的是不明确的结果。

类似地,如果使用values()查询来限制选定的列,则任何order_by() (或默认模型排序)中使用的列仍将涉及,并可能影响结果的唯一性。

这里的教训是,如果您使用distinct(),请注意按相关模型排序。同样,当同时使用distinct()和values()时,在按字段排序时要小心,因为字段不在values()调用中。

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

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10848809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档