我的订单型号如下:
class Order(models.Model):
order_date = models.DateField()
value = models.FloatField(default=0.00)
customer = models.ForeignKey(Customer, null=True, on_delete=models.SET_NULL, related_name='orders')
customer_city = models.ForeignKey(CustomerCity, null=True, on_delete=models.SET_NULL, related_name='orders_city')
我想在我的模板文件中生成一个当月前5名客户的表格(基于收到的订单总额),其中包含('customer'、'city'、'orders count'和'orders sum')字段。
他对如何获取这些数据完全感到困惑和不知所措。但是,在my views.py文件中尝试了以下代码:
today = datetime.date.today()
top_five_customers = Order.objects.filter(order_date__year=today.year, order_date__month=today.month).values('customer').annotate(orders_count=Count('customer'), orders_sum=Sum('value')).order_by('-orders_sum',)[:5]
然后在我的模板文件中,我有以下内容:
{% for customer in top_five_customers %}
<tr>
<td>{{ customer.customer }}</td>
<td>{{ customer.customer_city }}</td>
<td>{{ customer.orders_count }}</td>
<td>{{ customer.orders_sum }}</td>
</tr>
{% endfor %}
提前谢谢。
2条答案
按热度按时间taor4pac1#
您可以先筛选相关对象,然后
Sum
向上value
,并按该值排序:因此,此查询集将包含
Customer
物体。这个Customer
由此产生的问题QuerySet
将包含一个额外属性.total
这是订单的总数。使用django-3.2,我们可以稍微提高效率
.alias(…)
[django doc]在这种情况下,没有额外的属性用于Customer
s:8i9zcol22#
尝试开始使用sql视图。更易于开发和维护。