如何计算html模板中django中给定外键中的对象数量



我有三个模型。

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的模板langauge受到了有意的限制,以防止人们在模板中编写业务逻辑。此外,即使这是可能的,由于N+1问题,它也将是低效的。

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

from django.db.models import Count
Category.objects.annotate(
num_items=Count('subcategory__item')
)

来自查询集的Category对象将具有一个额外的属性.num_items,该属性包含与Category相关的Subcategory相关的项目总数。

最新更新