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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django ORM。检索每个类别的10个项目相关的知识,希望对你有一定的参考价值。

我在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。

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

答案

你可以试试这个:

items = {}

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

prefetch_related方法将为您提供没有不必要的数据库请求的类别项。

另一答案

非常简单:

 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

另一答案

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

items = []

categories = Category.objects.all()
for category in categories:
    items.extend(list(Item.objects.filter(category=category)[:10]))

以上是关于Django ORM。检索每个类别的10个项目的主要内容,如果未能解决你的问题,请参考以下文章

Django ORM:在不执行 N+1 查询的情况下检索帖子和最新评论

Django列出包含某些相同项目的类别中的项目

更好的方法从 django 的数据库中检索最近的 10 个项目

Django:列出页面中每个类别的产品

获取 WooCommerce 订单的每个项目的产品类别

使用 Django 的 ORM 加速批量插入?