首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django通过包含不必要的列来分组?

Django通过包含不必要的列来分组?
EN

Stack Overflow用户
提问于 2015-01-27 18:56:40
回答 1查看 1.2K关注 0票数 3

我有Django代码如下

qs = Result.objects.only('time') qs = qs.filter(organisation_id=1) qs = qs.annotate(Count('id'))

并将其转换为以下SQL:

SELECT "myapp_result"."id", "myapp_result"."time", COUNT("myapp_result"."id") AS "id__count" FROM "myapp_result" WHERE "myapp_result"."organisation_id" = 1 GROUP BY "myapp_result"."id", "myapp_result"."organisation_id", "myapp_result"."subject_id", "myapp_result"."device_id", "myapp_result"."time", "myapp_result"."tester_id", "myapp_result"."data"

正如您所看到的,GROUP子句以我想要的字段(id)开头,但随后它也列出了所有其他字段。有没有办法说服Django不要像这样指定所有单独的字段?

正如您所看到的,即使使用.only('time'),也不能阻止Django列出所有其他字段,但只在这个GROUP子句中。

我想这样做的原因是为了避免the issue described here,当涉及JSON字段时,PostgreSQL不支持注释。我不想放弃对本地JSON的支持(所以我实际上并不使用django-jsonfield)。如果我不引用"myapp_result"."data" (模型上唯一的JSON字段)手动发出它,查询就能正常工作。所以如果我能说服Django不提这个问题,我就没事了!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-27 19:09:05

only只延迟某些字段的加载,即允许延迟加载大字段或未使用的字段。通常不应该使用它,除非您清楚地知道自己在做什么以及为什么需要它,因为它只不过是一个性能提升器,通常会因为使用不当而降低性能。

您要寻找的是values() (或values_list()),它实际上排除了某些字段,而不只是延迟加载。这将返回一个字典(或列表),而不是一个模型实例,但这是告诉Django不要考虑其他字段的唯一方法:

代码语言:javascript
复制
qs = (Result.objects.filter_by(organisation_id=1)
            .values('time').annotate(Count('id')))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28177925

复制
相关文章

相似问题

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