python - itertools.groupby 无法通过外键正确分组 django 查询集
问题描述
假设我有以下模型:
class Category(models.Model):
name = models.CharField(max_length=10)
class Post(models.Model):
title = models.CharField(max_length=10)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
然后,我想选择所有帖子并按类别对它们进行分组:
from itertools import groupby
from operator import attrgetter
qs = Post.objects.all().select_related('category').order_by('category')
posts_group = groupby(qs, key=attrgetter('category'))
但是,posts_group 不包含预期的数据。
例如,我在数据库中有两个帖子,属于不同的类别。该查询确实选择了所有类别,但最后一个类别组中仅显示一个帖子。
解决方案
那这个呢:
def groub_posts_by_cat():
groups = {}
categories = Post.objects.values('category')
for cat in categories:
groups.update({
cat.name: Post.objects.filter(category__pk=cat.pk)
})
return groups
这里还有一篇关于如何执行 group_by 注释的优秀文章。
推荐阅读
- postgresql - 在 Postgresql 中显示某些表的约束
- python - 额外数据:第 2 行第 1 列 - 第 341211 行 - json.load 中的错误
- c# - C# 生成计算机独有的字符串
- c - C 中的 POSIX 信号量,用于 2 个单独的程序(消费者/生产者)
- c# - C# - 从数据库中检索数据并将其分配给变量
- sdk - 如何将 WorkItemsAffected 保存到风险中
- oracle - 使用触发器引发错误:ORA-20987: APEX - ORA-01858 ORA-06512
- reactjs - AWS Rekognition 图像编码问题
- json - 我突然得到的这个“意外的令牌/在 JSON 中的位置 772”是什么?(角2)
- mysql - 在 Spring Boot 中从 mysql 读取时出现奇怪的超时