#django #rest #django-rest-framework
#django #rest #django-rest-framework
Вопрос:
class Publisher(models.Model):
name = CICharField("Name", max_length=200, unique=True)
description = models.TextField("Description", blank=True)
class Category(models.Model):
name = CICharField("Name", max_length=200, unique=True)
description = models.TextField("Description", blank=True)
class Book(models.Model):
name = CICharField("Name", max_length=200, unique=True)
description = models.TextField("Description", blank=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name="books", blank=True, null=True)
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE, related_name="books", blank=True, null=True)
Я хочу, чтобы все объекты Books фильтровались по издателю и группировались по категориям. Например.
books = Books.objects.all().filter(publisher=1).group_by('category')
Вывод будет выглядеть,
[
{ category 1: [book1, book2, ...] },
{ category 2: [book3, book4,... ] },
]
Может кто-нибудь сказать мне, как я могу этого добиться?
Спасибо.
Ответ №1:
Я предполагаю, что вы хотите выполнить некоторую агрегацию своих данных (например, подсчет или сумма). Для этой цели вы можете использовать что-то вроде
from django.db.models import Count
books = Books.objects.all().filter(publisher=1).values('category').annotate(Count('id'))
Который будет группировать ваши данные category
и подсчитывать идентификаторы ваших книг на основе каждой группы. Вы также можете прочитать больше о аннотации здесь .