gpt4 book ai didi

python - Django 中每个客户(通过迭代)的订单值(value)计数和总和

转载 作者:行者123 更新时间:2023-12-05 04:48:38 24 4
gpt4 key购买 nike

我有如下的客户和订单模型:

class Customer(models.Model):
name = models.CharField(max_length = 100)
city = models.CharField(max_length = 100)

class Order(models.Model):
value = models.FloatField()
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)

现在我想生成一个(不同的)客户表以及每个客户所下订单的数量以及这些订单的值(value)总和。我在 views.py 中试过这个:

def customers(request):
customer_orders = Order.objects.distinct().annotate(Sum('value'))

然后在我的 html 模板中,我尝试了以下操作:

<ul>
{% for customer in customer_orders %}
<li>{{customer.customer}} - {{customer.value__sum}}<li>
{% endfor %}
</ul>

完成这一切之后,我得到的不是唯一客户(和各自的订单记录),而是所有订单的列表,并且客户正在重复(如下所示)。不确定我在这里遗漏了什么。

博斯科沃德 - 16,700.0Ernser PLC - 51,200.0墨菲有限公司 - 21,400.0科勒-Veum - 29,200.0施密特-勒格罗斯 - 96,800.0Brown-Weissnat - 8,200.0博斯科沃德 - 36,400.0Ernser PLC - 66,600.0墨菲有限公司 - 84,200.0

还想知道是否有可能生成一个城市名称表,其中包含订单计数和从该城市收到的订单总值(value)(请注意,我的订单模型没有城市字段)。

最佳答案

因为你想要一个 Customer 实例的查询集,所以你可以在 Customer 模型本身而不是 Order 上进行查询,接下来我相信你会不需要在这里使用 distinct 因为客户实例应该被认为是唯一的。因此,您可以进行如下查询:

from django.db.models import Count, Sum


customers = Customer.objects.annotate(order_count=Count('order'), order_value_sum=Sum('order__value'))


for customer in customers:
print(customer.name, customer.order_count, customer.order_value_sum)

关于python - Django 中每个客户(通过迭代)的订单值(value)计数和总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67985589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com