我正在为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 %}
答案 0 :(得分:2)
一般原则是从要检索的对象开始,或者在这种情况下计数。因此,您需要从ShopProduct开始并遵循关系。在一个视图中:
ShopProduct.objects.filter(subcategory__category__section=my_section)
但是,您无法在模板中执行此操作,因为您无法使用参数调用方法。因此,您需要将此定义为Section类的方法,将my_section
替换为self
,然后您可以执行(例如){{ section.get_product_count }}
。