Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Django QuerySet:按特定字段限制结果分组

Django QuerySet:按特定字段限制结果分组
EN

Stack Overflow用户
提问于 2014-07-28 10:14:49
回答 3查看 759关注 0票数 4

我搜索了一下,却找不到做以下事情的方法:

假设我们有一个包含"field_a“和"field_b”字段的Django模型。我希望以某种方式限制结果,即对于"field_a“的每个不同值,从模型表中检索最多N个条目。因此,这不是对查询集进行切片的情况,因为这不会区分"field_a“值。

PS:有一种使用SQL的方法。

让我们举一个例子:

代码语言:javascript
运行
AI代码解释
复制
class ExampleModel(models.Model):
    foreign = models.ForeignKey(ForeignTable)
    user = models.ForeignKey(User, related_name="user_attending")

基本上,我想做以下几点:

查找所有具有特定id的ExampleModels,用于foreign_iduser_id。但是我只想从一个user_id的列表中找出最多3个user_id的,所以即使有20个匹配的user_id为某个foreign_id,给我前三名。

我很感激你的帮助!

编辑:我的问题似乎被误解了,所以我要举一个例子。发自:

代码语言:javascript
运行
AI代码解释
复制
foreign_id=1,user_id=1
foreign_id=1,user_id=2
foreign_id=1,user_id=3
foreign_id=1,user_id=4
foreign_id=2,user_id=5
foreign_id=2,user_id=6
foreign_id=2,user_id=3
foreign_id=2,user_id=2
foreign_id=3,user_id=1
foreign_id=3,user_id=9

结果是,只有一个查询集:

代码语言:javascript
运行
AI代码解释
复制
foreign_id=1,user_id=1
foreign_id=1,user_id=2
foreign_id=1,user_id=3
foreign_id=2,user_id=5
foreign_id=2,user_id=6
foreign_id=2,user_id=3
foreign_id=3,user_id=1
foreign_id=3,user_id=9
EN

回答 3

Stack Overflow用户

发布于 2014-07-28 11:11:47

试着使用切片示例:

代码语言:javascript
运行
AI代码解释
复制
ExampleModel.objects.filter(ForeignTable__id=1).order_by('id')[:3]

返回前3个对象(限制为3)

票数 1
EN

Stack Overflow用户

发布于 2014-07-28 11:03:46

如果您知道如何在SQL中执行此操作,那么我建议您将该约束作为一个额外的选项添加到django queryset中,如这个问题接受的答案中所示。

也见Queryset额外文档

票数 0
EN

Stack Overflow用户

发布于 2014-07-28 12:46:45

好吧,您可以这样做,对于下面的模型:

代码语言:javascript
运行
AI代码解释
复制
class ExampleModel(models.Model):
    foreign = models.ForeignKey(ForeignTable)
    user = models.ForeignKey(User, related_name="user_attending")
    time_created= models.DateTimeField(auto_now_add=True)


results= ExampleModel.objects.filter(foreign__id=1).annotate(time_created_max=Max('time_created')).order_by('time_created_max').distinct()

three_results= results[:3] 

PS:order_bydistinct一起会导致问题,因此我附加了另一个字段。参考这里

通常,切片QuerySet返回一个新的QuerySet -它不计算查询。参考这里

编辑:我不认为请求的进程可以通过一个查询来完成。

代码语言:javascript
运行
AI代码解释
复制
data= [ ExampleModel.objects.filter(foreign_id=f)[0:2] for f in ForeignTable.objects.all()]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25001615

复制
相关文章
如何查看Django ORM执行的SQL语句
Django ORM对数据库操作的封装相当完善,日常大部分数据库操作都可以通过ORM实现。
BigYoung小站
2020/05/06
1.9K0
如何修改django的app在admin中显示的名称
在django的开发中,很多时候我们希望app在admin中显示成我们想要的中文名,而不是显示默认的app_label名称。 比如我们有一个blog应用,在我们的blog app目录下面,默认会生成一个apps.py文件,类似:
小海怪的互联网
2019/09/25
3.5K0
如何修改django的app在admin中显示的名称
网站如何加入显示运行时间
世间万物皆苦,你明目张胆的偏爱就是救赎。 网站加入运行时间精确到秒 把下面代码加到你需要的地方,很简单的,我还是比较喜欢这样的个性代码的 <span id="runtime_span"></span> <script type="text/javascript"> function show_runtime() {window.setTimeout("show_runtime()",1000); X=new Date("10/16/2017 5:22:00"); Y=new Date(); T=(Y.
白黎
2023/03/16
7550
网站如何加入显示运行时间
Django admin显示中文
在定义 Model 类的时候,在 Meta 里面显式指定 verbose_name 和 verbose_name_plural即可指定该模型在 Admin 里面显示的别名。
用户2936342
2018/08/27
1.2K0
django显示当前时间
直接用HttpResponse返回一个html标签不太好,如果代码比较多,就不合适了。
py3study
2018/08/02
3.1K0
如何修改django的app在admin后台中显示的名称,也就是显示为中文
第一步 在以上的文件里面写你想要展示的中文 第二部 将那个方法在init文件里面导入,重新启动项目就可以了
一写代码就开心
2020/12/01
1.4K0
如何修改django的app在admin后台中显示的名称,也就是显示为中文
Spring Boot 如何监控 SQL 运行情况?
今天想和大家聊一聊 Druid 中的监控功能。 Druid 数据库连接池相信很多小伙伴都用过,个人感觉 Druid 是阿里比较成功的开源项目了,不像 Fastjson 那么多槽点,Druid 各方面一直都比较出色,功能齐全,使用也方便,基本的用法就不说了,今天我们来看看 Druid 中的监控功能。 1. 准备工作 首先我们来创建一个 Spring Boot 工程,引入 MyBatis 等,如下: 选一下 MyBatis 和 MySQL 驱动,做一个简单的测试案例。 先来连接一下数据库: spring.da
江南一点雨
2022/03/04
6130
SpringBoot 如何统计、监控 SQL运行情况?
上述配置文件的参数可以在 com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties 和 org.springframework.boot.autoconfigure.jdbc.DataSourceProperties中找到;
鱼找水需要时间
2023/02/16
1.6K0
SpringBoot 如何统计、监控 SQL运行情况?
[Centos7.2]Django挂载后台运行
在Linux环境中运行这个命令,倘若是通过ssh连接,在连接关闭后Dango也会跟着中断!
贰叁壹小窝
2020/07/22
1.2K0
显示mybatis的执行的sql
让mybatis也像hibernate.show_sql一样显示执行sql
似水的流年
2018/01/14
6850
显示mybatis的执行的sql
显示mybatis的执行sql 让mybatis也像hibernate.show_sql一样显示执行sql 在log4j.properties 添加 log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console
似水的流年
2018/01/18
9020
显示mybatis的执行的sql
显示mybatis的执行sql 让mybatis也像hibernate.show_sql一样显示执行sql 在log4j.properties 添加
似水的流年
2019/12/08
8030
如何让django的model名和应用名显示为中文
如何修改django.admin中一个应用的名称:复制下面的代码放入应用目录下的init.py中即可,通过修改 verbose_name = u’中文名称’
菲宇
2022/12/21
8460
docker 运行Django项目
已经写好了一个Django项目,需要将这个项目用docker封装一个镜像,使用k8s发布!
py3study
2020/02/24
1.3K0
Django 中图片的上传及显示
在 Django 中,上传文件不同于普通服务器的上传方法,在普通服务器中只需要使用一个 Controller 来控制文件的上传即可完成,但是在 Django 中,则需要额外使用数据库资源来存储文件。本文将说明如何使用 Django 接收、保存并且返回图片。
Kindem
2022/08/12
3.4K0
如何杀掉pg数据库正在运行的sql
我们在生产环境可能经常遇到长sql,长sql对数据库的影响还是挺大的,不仅可能对主机资源消耗较大,还可能会阻塞其他sql的正常执行,所以对于长sql我们要尤其注意。一般生产环境都会配置长sql告警,可以根据业务情况调整告警阈值。
数据库架构之美
2019/12/18
4.1K0
Mybatis显示SQL语句
众所周知,hibernate可以通过配置show_sql在控制台显示sql语句,Mybatis可不可以呢?当然是可以的,将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句,方便调试:
河岸飞流
2019/08/09
2K0
pycharm怎么运行django项目_django怎么用
 原文转载自:http://www.cnblogs.com/Leo_wl/p/5824541.html
全栈程序员站长
2022/09/27
2.4K0
pycharm怎么运行django项目_django怎么用
点击加载更多

相似问题

QuerySet按多个字段分组django

10

Django queryset按字段排序

10

按特定字段划分的Django模型QuerySet群

12

按字段对结果进行Django分组

20

Django queryset分组

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档