我目前正在学习django,以下是当前设置:
models.py
class Customer(models.Model):
name = models.CharField(max_length=200, null=True)
phone = models.CharField(max_length=200, null=True)
def __str__(self):
return self.name
class Order(models.Model):
STATUS = (
('Pending', 'Pending'),
('Delivered', 'Delivered'),
)
customer = models.ForeignKey(Customer, null=True, on_delete=models.SET_NULL)
status = models.CharField(max_length=200, null=True, choices=STATUS, default="Pending")
def __str__(self):
return self.product.name
views.py
def home(request):
orders = Order.objects.all().order_by('-date_created')
customers = Customer.objects.all()
c_pending = orders.filter(status='Pending').all()
context = {
'orders': orders,
'customers': customers,
'c_pending': c_pending,
}
return render(request, 'home.html', context)
home.html
{% for customer in customers %}
<tr>
<td>{{customer.name}}</td>
<td>{{customer.phone}}</td>
<td>{{customer.order_set.count}}</td>
<td>{{c_pending.count}}</td>
</tr>
{% endfor %}
除了第四列之外,第一到第三列的工作都完美无缺。问题是我希望在第四栏中显示编号。每个客户处于待处理状态的订单数量,但确实显示了总数。整个待处理订单。为了让Django模板正确提取编号,我缺少哪些步骤。处于待处理状态的每个客户的订单数。非常感谢您的帮助。谢谢。
c_pending
只是所有待处理订单的查询集,而不是该客户本身。您可以用挂单数量注释查询集:
from django.db.models import Count, Q
def home(request):
orders = Order.objects.all().order_by('-date_created')
customers = Customer.objects.annotate(
total_orders=Count('order'),
total_pending=Count('order', filter=Q(order__status='Pending'))
)
context = {
'orders': orders,
'customers': customers,
'c_pending': c_pending,
}
return render(request, 'home.html', context)
在视图中,然后使用以下命令渲染该视图:
{% for customer in customers %}
<tr>
<td>{{ customer.name }}</td>
<td>{{ customer.phone }}</td>
<td>{{ customer.total_orders }}</td>
<td>{{ customer.total_pending }}</td>
</tr>
{% endfor %}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句