【发布时间】:2019-01-30 01:41:00
【问题描述】:
假设我有以下模型:
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 不包含预期的数据。
例如,我在数据库中有两个帖子,属于不同的类别。该查询确实选择了所有类别,但最后一个类别组中只显示了一个帖子。
【问题讨论】:
-
groupby通过可迭代的方式按顺序工作。如果你想把所有相同的键收集在一起,你需要自己排序。 -
查询已经按类别排序。
-
您将不得不创建一个 minimal reproducible example 来证明您的问题。
-
您忽略了展示您如何使用
groupby可迭代(并且很多 人都搞错了,所以这非常重要;您的所描述的不当行为听起来很像您试图listify 整件事,这是错误要做的事情)。请包含包含该代码的minimal reproducible example。 -
先申请
values()。 stackoverflow.com/a/49835484/4257237
标签: python django django-orm