我有一个商业挑战的复选框和标签的列表。我想为每一个商业挑战申请类别,但我正在努力计数每一个类别的商业挑战数量。
这就是我所拥有的:
models.py
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
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 contexttest.html
<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>任何关于我做错了什么以及如何正确计算每一类业务挑战的建议,我们将不胜感激。
发布于 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循环迭代中得到所需的内容。
https://stackoverflow.com/questions/73444416
复制相似问题