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 查询的情况下检索帖子和最新评论