Django聚合:按类别销售

时间:2012-07-04 20:05:23

标签: django aggregation

我试图按类别获得总销售额。

我知道有一种方法可以用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

但我被困在价格部分。

非常感谢任何帮助。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

您可能希望向模型添加功能。这样的事情应该有效。

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"]