【问题标题】:Django aggregation: Sales by CategoryDjango 聚合:按类别销售
【发布时间】:2012-07-05 07:12:37
【问题描述】:

我正在尝试按类别计算总销售额。

我知道有一种方法可以用 python 做到这一点,但我宁愿用查询或聚合来做到这一点。

我的模型:

class Item(models.Model):
   category= models.ForeignKey(Category)
   name = models.CharField(max_length=40)

class Category(models.Model):
   name = models.CharField(max_length=40)

class Store(models.Model):
   name=models.CharField(max_length=40)

class Sale(models.Model):
   item=models.ForeignKey(Item)
   store=models.ForeignKey(Store)
   quantity=models.IntegerField()

class Store_Item(models.Model):
   item=models.ForeignKey(Item)
   store=models.ForeignKey(Store)
   price= models.DecimalField(max_digits=10, decimal_places=2)

结果应该是这样的:

          sales total
books     100   859.10
audio     200   1894.20

total     300   2753.3    

现在我正在获取每个类别的总数,如下所示:

p=Sale.objects.all().values('item__category__name').order_by('item__category__name').annotate(total=Sum('quantity'))

我明白了:

books  100
audio  200

但我被价格部分困住了。

任何帮助将不胜感激。 提前致谢!

【问题讨论】:

  • 我正在尝试按如下类别获取所有销售额:test=Sale.objects.all().order_by('item__category').annotate(total=Sum('quantity'))。 values('item__category__name', 'total') 我已经在这里搜索过了,我还在搜索中
  • 您应该更新您的问题,显示您一直在尝试的内容、当前的输出、错误等。您需要使这更容易,以便其余的可以帮助您
  • 谢谢 César,我已经得到了每个类别的总和。我被困在从每家商店的商品价格中进行选择。

标签: django aggregation


【解决方案1】:

您可能希望向模型添加一个函数。这样的事情应该可以工作。

class Sale(models.Model):
   item=models.ForeignKey(Item)
   store=models.ForeignKey(Store)
   quantity=models.IntegerField()

   def _getTotal(self):
     self.sale.extra(select=("total": "quantity * item_price")
                                ).aggregate(total=Sum("total"))["total"]

【讨论】:

  • 我正在 Store_Item 中保存价格
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多