加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Django QuerySet:限制某些字段的结果分组

发布时间:2020-12-20 13:43:51 所属栏目:Python 来源:网络整理
导读:我搜索过,找不到办法做以下事情: 假设我们有一个Django模型,其字段为“field_a”和“field_b”. 我想以某种方式限制结果,对于每个不同的“field_a”值,从模型表中检索最多N个条目.因此,这不是切片查询集的情况,因为这不会区分“field_a”值. PS:有一种方法
我搜索过,找不到办法做以下事情:

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

PS:有一种方法可以使用SQL.

让我们举一个例子:

class ExampleModel(models.Model):
    foreign = models.ForeignKey(ForeignTable)
    user = models.ForeignKey(User,related_name="user_attending")

基本上我想做以下事情:

找到具有foreign_id和user_id的特定id的所有ExampleModel.但我只想从user_id列表中找到最多3个user_id.因此,即使某个foreign_id有20个匹配的user_id,也请给我前三名.

我很感激帮助!

编辑:
似乎我的问题被误解了,所以我将提供一个例子.从:

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

结果是,只有一个Query集:

foreign_id=1,user_id=3
foreign_id=3,user_id=9

解决方法

尝试使用切片
为例:

ExampleModel.objects.filter(ForeignTable__id=1).order_by('id')[:3]

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读