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



我的Django REST.中有两个模型

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

我需要构建queryset,其中每个类别有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方法将为您提供类别项,而不需要不必要的数据库请求。

您可以使用id来完成。例如,我们有一个年份类别。它有很多类别,比如2014年等等,直到2022年。然后我们可以这样做——假设我们想从2014-2022年开始进行分类。2022是最后一个,我们通过id=8获得它,然后这样做:

class Vind(models.Model):
new_games = Games.objects.filter(date_games__lte=8, id__lt=12)
date_games = models.ForeignKey(DateGames, on_delete=models.PROTECT)
DateGames these are the categories of years

现在是代码。我们要求date_games为我们提供小于或等于8个类别的类别(共有8个(,并且每个类别丢弃10个对象(少了2个(。

非常简单:

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条记录

如果你没有太多的类别,最简单的方法是选择所有类别(或它们的子集(,然后迭代它们,从每个类别中选择10个项目

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

相关内容

最新更新