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

2024-04-23 11:57:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三种型号,分别是

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上不起作用。如何获取每个给定类别下的课程数量。我没有将类别作为外键包含在我的项目模型中,因为这可能会导致为项目分配错误的类别子类别对


Tags: namemodelonmodelsdelete类别lengthmax
1条回答
网友
1楼 · 发布于 2024-04-23 11:57:55

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

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

from django.db.models import Count

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

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

相关问题 更多 >