【问题标题】:Django group by a query set and multiply with another fieldDjango 按查询集分组并与另一个字段相乘
【发布时间】:2016-01-10 18:11:05
【问题描述】:

我有这种模型:

class OrderProducts(models.Model):
    product  = models.ForeignKey(Product)
    quantity = models.IntegerField()
    ...

我需要计算有多少 OrderProducts 具有相同的产品。它正在使用这条线:

ordersProduct = OrderProducts.objects.prefetch_related('product_set')\
   .filter(my-filter)\
   .values('product','product__title')\
   .annotate(total=Count('product'))\
   .order_by('-total')

这条线有效,我知道我有多少相同的 OrdersProduct。但是,我需要为每个 OrdersProduct 添加每个 orderProduct 的总数量。

如果我有 3 次相同的 OrderProduct 里面有相同的产品,我想知道这 3 个查询的每个数量的数量(总计)。

谢谢!

编辑:

它正在处理这个:

ordersProduct = OrderProducts.objects.prefetch_related('product_set')\
    .filter('my-filter')\
    .values('product','product__title')\
    .annotate(total_ordered=models.Sum('quantity'),num_orders=models.Count('product'))

【问题讨论】:

    标签: python mysql sql django


    【解决方案1】:

    这是你想要的吗?

    class OrderProducts(models.Model):
        product  = models.ForeignKey(Product, related_name='orders')
    
    Product.objects.annotate(total_ordered=models.Sum('orders__quantity'),
                             num_orders=models.Count('orders__id'))
    

    【讨论】:

    • 我的荣幸。如果它对您有用,请将答案标记为已接受,以便其他人可以依赖它。
    • 感谢您的回答。但我不认为这是我要找的。我需要添加每个分组查询的每个数量。对每个产品的数量进行分组,并了解所有相同查询的总数量。
    • 您能解释一下“分组的每个产品的数量”是什么意思吗?你有ProductGroup 什么的吗?使用所有相关模型扩展您的帖子也会有很大帮助。
    • 嗯,这太棒了,但我们无法想象应该如何计算这些数字。你能至少给我们你想看到的结果吗?一些示例数据和您尝试实现的查询结果。
    • 大声笑,抱歉这很难...我需要两个数字。第一个是相同产品的每个相同查询的总数。所以通过上面的代码,我知道我有多少产品。但是,我需要每个产品分组的总数量,例如: OP1.create(product="test",quantity=4); OP2.create(product="test",quantity=1);对于同一个产品(产品“TEST”),我将总共有 2 个,因为我有两个关于同一个产品的查询。但是我需要计算每个数量的同一产品的总数量,在这种情况下是 4 + 1 = 5。你明白吗?
    猜你喜欢
    • 1970-01-01
    • 2014-01-18
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多