【发布时间】:2020-06-17 18:51:40
【问题描述】:
我有两个模型如下所示
class Services(models.Model):
name = models.CharField(max_length=200, null=True)
price = models.FloatField(null=True)
service_sku = models.CharField(max_length=200, null=True)
class Order(models.Model):
customer = models.ForeignKey(Customer, null=True, on_delete = models.SET_NULL)
service = models.ForeignKey(Service, null=True, on_delete = models.SET_NULL)
我已经基于服务模型创建了一个基于函数的视图,我想在其中呈现一个模板,该模板显示来自服务模型的每个实例的字段信息列表。
以下是我的观点和模板
views.py
def service_list(request):
service_list = Service.objects.all().order_by('service_sku')
context = {'service_list':service_list}
return render(request, 'accounts/service_list.html',context)
template
<div class="card card-body">
<table class="table">
<tr>
<th>SKU</th>
<th>Service Name</th>
<th>Number of Ordered</th>
</tr>
{% for i in service_list %}
<tr>
<td>{{i.service_sku}}</td>
<td>{{i.name}} </td>
<td></td>
</tr>
{% endfor %}
考虑到订单模型具有来自服务模型的外键,我想显示每个实例的订单数。
查询集必须如下所示。
Order.objects.all().filter(service__id =3).count()
问题是我必须指定该模型的哪个 id 才能使该查询集工作。
我尝试将下面的查询集格式放入模板中
{{Order.objects.all().filter(service__id=i.id).count()}
在模板中它看起来像下面的样子
template
<div class="card card-body">
<table class="table">
<tr>
<th>SKU</th>
<th>Service Name</th>
<th>Number of Ordered</th>
</tr>
{% for i in service_list %}
<tr>
<td>{{i.service_sku}}</td>
<td>{{i.name}} </td>
<td>{{Order.objects.all().filter(service__id=i.id).count()}}</td>
</tr>
{% endfor %}
上述实现不起作用。
哪种方法最适合这种情况?
【问题讨论】:
-
您不能在 Django 模板中调用方法(带参数)。故意限制模板以防止人们在模板中编写业务逻辑。
-
明白了,如何显示“每个实例的订单数”?
标签: python django django-views django-templates