首页 > 解决方案 > 如何计算html模板内django中给定外键中的对象数量?

问题描述

我有 3 个模型。

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

class Subcategory(models.Model):
  name = models.CharField(max_length=100)
  category = models.ForeignKey(Category, on_delete=models.CASCADE)

class Item(models.Model):
  name = models.CharField(max_length=100)
  subcategory = models.ForeignKey(Subcategory, on_delete=models.CASCADE)

在我的 Html 模板中,我想访问每个给定类别中的项目数。我曾尝试使用 _set 方法,但它不适用于category.subcategory_set.course_set.count. 如何访问每个给定类别下的课程数量。我没有在我的项目模型中将类别作为外键包括在内,因为它可能导致为项目分配错误的类别-子类别对。

标签: pythondjangopython-3.xdjango-modelsdjango-views

解决方案


请不要在模板中执行此操作。Django 的模板语言被刻意限制,以防止人们在模板中编写业务逻辑。此外,即使这是可能的,由于N+1问题,它也将是低效的。

您可以通过定义查询集来计算每个类别的项目数:

from django.db.models import Count

Category.objects.annotate(
    num_items=Count('subcategory__item')
)

从此查询集中产生的Category对象将具有一个额外的属性,该属性包含与 a相关项目的总数。.num_itemsSubcategory Category


推荐阅读