itertools.groupby无法通过外键正确组合Django queryset

时间:2019-01-30 01:41:00

标签: python django django-orm

假设我具有以下模型:

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不包含预期的数据。

例如,我在数据库中有两个帖子,它们属于不同的类别。该查询确实选择了所有类别,但在最后一个类别组中仅显示一个帖子。

1 个答案:

答案 0 :(得分:0)

那呢:

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

这也是excellent文章,介绍如何执行group_by注释。