如何在Django中获得第三级对象计数

时间:2015-09-09 04:53:48

标签: python django

我正在为Django上的小型电子市场项目建立一个部分,类别和子类别列表。

我有一个这样的模型:

  

部分>类别(FK部分)>子类别(FK类别)> ShopProduct(FK SubCategory)

问题是我有很多类别(和子类别)都是空的,因此我使用以下方法过滤查询集中的数据:

{% if section.shopcategory_set.count > 0 %}

如果为此部分分配了多个类别,它将过滤部分。 (但如果任何项目分配得更深,它不会过滤)

所以,我想计算第一级循环中的最终对象

类似的东西:

{% for section in sections %}
    {% if section.category_set.subcategory_set.shopproduct_set.count > 0 %}
    {{ section.name }}
    {% endif %}
{% endfor %}

1 个答案:

答案 0 :(得分:2)

一般原则是从要检索的对象开始,或者在这种情况下计数。因此,您需要从ShopProduct开始并遵循关系。在一个视图中:

ShopProduct.objects.filter(subcategory__category__section=my_section)

但是,您无法在模板中执行此操作,因为您无法使用参数调用方法。因此,您需要将此定义为Section类的方法,将my_section替换为self,然后您可以执行(例如){{ section.get_product_count }}