Джанго ОРМ.Получить 10 предметов для каждой категории - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть 2 модели в My Django REST.

class Category(models.Model):
    name = models.CharField()

class Item(models.Model):
    name = models.CharField()
    category = models.ForeignKey(Category)

Мне нужен набор запросов, в котором я получаю 10 элементов для каждой категории.Я не знаю, нужна ли мне категория фильтра или элемент, но, возможно, кто-то может мне помочь.

Думаю, мне нужно что-то вроде этого: Item.objects.filter .. если элемент с той же категорией не> 10.

Мне будет приятно, если кто-нибудь покажет мне какой-то путь или решение.

Ответы [ 3 ]

0 голосов
/ 24 ноября 2018

Похоже, если у вас не слишком много категорий, самый простой выход - выбрать все категории (или их подмножество), а затем выполнить итерацию по ним и выбрать 10 элементов из каждой категории

items = []

categories = Category.objects.all()
for category in categories:
    items.extend(list(Item.objects.filter(category=category)[:10]))
0 голосов
/ 24 ноября 2018

Вы можете попробовать это:

items = {}

categories = Category.objects.prefetch_related('item_set').all()
for category in categories:
    items[category.name] = list(category.item_set.all()[:10])

Метод prefetch_related предоставит вам элементы категории без ненужных запросов БД.

0 голосов
/ 24 ноября 2018

Очень просто:

 for cat in Category.objects.all():
     if items is null:
         items = Item.objects.filter(category=cat)[:10]
     items += Item.objects.filter(category=cat)[:10]

если вы хотите один запрос, вам придется написать свой собственный SQL - см. Выберите 10 лучших записей для каждой категории

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...