【问题标题】:How to count the number of objects in a given foreign key in django inside the html template?如何计算html模板内django中给定外键中的对象数?
【发布时间】:2020-04-24 17:41:39
【问题描述】:

我有 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。如何访问每个给定类别下的课程数量。我没有在我的 Items 模型中将类别作为外键包含在内,因为它可能导致为项目分配错误的类别-子类别对。

【问题讨论】:

    标签: python django python-3.x django-models django-views


    【解决方案1】:

    请不要在模板中这样做。 Django 的模板语言被刻意限制,以防止人们在模板中编写业务逻辑。此外,即使有可能,由于 N+1 问题,它也会效率低下。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 2011-08-16
      • 2019-07-31
      • 2018-04-21
      • 2022-06-25
      相关资源
      最近更新 更多