Django ORM。检索每个类别的10个项目

问题描述 投票:0回答:3

我在My Django REST中有2个模型。

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

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

我需要构建查询集,每个类别我得到10个项目。我不知道我需要过滤类别或项目,但也许有人可以帮助我。

我想我需要这样的东西:Item.objects.filter ..如果相同类别的项目不是> 10。

如果有人告诉我一些方法或决定,我会很高兴。

django django-rest-framework django-queryset django-orm
3个回答
1
投票

你可以试试这个:

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
投票

非常简单:

 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 - 请参阅Select top 10 records for each category


0
投票

看起来如果没有太多的类别,最简单的方法是选择所有类别(或其中的一部分),然后迭代它们并从每个类别中选择10个项目

items = []

categories = Category.objects.all()
for category in categories:
    items.extend(list(Item.objects.filter(category=category)[:10]))
© www.soinside.com 2019 - 2024. All rights reserved.