itertools.groupby не может правильно сгруппировать набор запросов django по иностранному ключу - PullRequest
0 голосов
/ 30 января 2019

Предположим, у меня есть следующие модели:

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 голосов
/ 30 января 2019

Как насчет этого:

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.

...