首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django注释-在模板中计数嵌套项的问题

django注释-在模板中计数嵌套项的问题
EN

Stack Overflow用户
提问于 2022-08-22 11:33:48
回答 1查看 21关注 0票数 0

我有一个商业挑战的复选框和标签的列表。我想为每一个商业挑战申请类别,但我正在努力计数每一个类别的商业挑战数量。

这就是我所拥有的:

models.py

代码语言:javascript
复制
class BusinessChallangeCategory(models.Model):
    title = models.CharField(max_length=300)
        
class BusinessChallange(models.Model):
    title = models.CharField(max_length=300)
    category = models.ForeignKey(BusinessChallangeCategory, on_delete=models.CASCADE, related_name='category_business_challange')

class Product(models.Model):
    title = models.CharField(max_length=300)
    business_challange = models.ManyToManyField(BusinessChallange, related_name='business_challange_product')

views.py

代码语言:javascript
复制
class ManualSearch(ListView):
    template_name = 'test.html'
    model = Product
    queryset = Product.objects.filter(status=1)
    
    def get_context_data(self, **kwargs):
        context = super(ManualSearch, self).get_context_data(**kwargs)
        business_challange = BusinessChallangeCategory.objects.annotate(business_challange_count=Count('category_business_challange__business_challange_product'))

        context['business_challange'] = business_challange
        return context

test.html

代码语言:javascript
复制
<div class="filter-container" id="business-challange-list">
    <strong class="f-12">Business challanges</strong><br>
    {% for bc_category in business_challange %}
    <div class="fw-bold f-12">{{bc_category.title}}</div>
        {% for bc in bc_category.category_business_challange.all %}
        <div class="form-check d-flex business-challange-item">
            <input class="form-check-input" type="checkbox" value="{{bc.title}}" id="{{bc.title}}" data-filter="business_challange">
            <label class="form-check-label ps-2" for="{{bc.title}}">
                {{bc.title}}
            </label>
            <span class="ms-auto ps-2 text-muted f-12">{{bc.business_challange_count}}</span> #count is not working, it doesn't appear at all
        </div>
        {% endfor %}
    {% endfor %}
</div>

任何关于我做错了什么以及如何正确计算每一类业务挑战的建议,我们将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-22 12:08:53

在模板business_challange中对一个查询集中的值进行注释,但在迭代另一个queryset bc_category.category_business_challange.all时尝试访问它,每次运行时调用DB。您不需要注释,尽管可以直接调用{{bc.business_challange_product.count}}。不过,每个查询都会发出另一个查询。

从性能的角度来看,我建议直接对BusinessChallange的第二个查询集进行注释,而不是在python中按类别对BusinessChallangeCategory和组进行注释,这样您就可以在一个查询和一个for循环迭代中得到所需的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73444416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档