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

时间:2018-11-24 12:44:47

标签: django django-rest-framework django-queryset django-orm

我的Django REST中有2个模型。

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

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

我需要构建queryset,其中每个类别有10个项目。 我不知道我是否需要过滤器类别或项目,但也许有人可以帮助我。

我认为我需要这样的东西:     Item.objects.filter ..如果同一类别的项目不大于10。

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

3 个答案:

答案 0 :(得分: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方法将为您提供类别项目,而无需不必要的数据库请求。

答案 1 :(得分: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

答案 2 :(得分:0)

如果您没有太多的类别,最简单的方法是选择所有类别(或其中的一个子集),然后遍历它们并从每个类别中选择10个项目

SET /A var1 = %port[%%A]%
SET /A ont[%%A]=%free[%var1%]%