python - 如何计算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
. 如何访问每个给定类别下的课程数量。我没有在我的项目模型中将类别作为外键包括在内,因为它可能导致为项目分配错误的类别-子类别对。
解决方案
请不要在模板中执行此操作。Django 的模板语言被刻意限制,以防止人们在模板中编写业务逻辑。此外,即使这是可能的,由于N+1问题,它也将是低效的。
您可以通过定义查询集来计算每个类别的项目数:
from django.db.models import Count
Category.objects.annotate(
num_items=Count('subcategory__item')
)
从此查询集中产生的Category
对象将具有一个额外的属性,该属性包含与 a相关的项目的总数。.num_items
Subcategory
Category
推荐阅读
- screenshot - ImageMagick 无效的图像索引
- python - Fast.ai:ModuleAttributeError: 'Sequential' 对象没有属性 'fine_tune'
- java - 错误:空对象引用上的 android.widget.CompoundButton.setOnCheckedChangeListener
- asp.net-core - 如何在 MVC Razor 项目的选择标记中接收所有选项项?
- html - 可以将对象 ID 放入数据集属性吗?
- tensorflow - 如何使用纯 C API 加载张量流模型的元图?
- bash - Unix 脚本、awk 和 csv 处理
- python - 删除对于非唯一 id 具有相同列值的观察
- javascript - 在同步请求期间已删除的对象继续在逻辑上删除其实体
- python-3.x - 用 Beautifulsoup 复制的元素