Django manytomany:获取所有集合的所有元素

Django manytomany: get all elements of all sets

我有两个相关的模型; ItemCategory,它们看起来如下:

class Category(models.Model):
    name = models.CharField(max_length=200)
    items = models.ManyToManyField(Item)

class Item(models.Model):
    name = models.CharField(max_length=200)

我想创建一个列出所有 Categories 及其各自 Items 的页面。我意识到我可以迭代 Category.objects.all() 并为每个实例检索 .items.all(),但这似乎非常低效。有没有一种方法可以在恒定数量的查询中执行此操作,而不是在按类别数量缩放的查询中执行此操作?我设想结果是某种包含 ItemsCategories 的二维数据结构,然后我可以在我的模板中的嵌套循环中迭代它。

我见过像 this one 这样处理类似问题的问题,但这些问题通常围绕着他们希望查找的一些 Item 实例(实际上,可以在固定数量的查询)。

这正是 prefetch_related 所做的。

事实上,这为您提供了一个查询集,但 .items.all() 已预先填充。