Django聚合了3个模型的查询

时间:2015-11-15 12:03:32

标签: python django django-models django-rest-framework

我有3个模型:EventProductTicket

每个Event可以有多个Products,每个Product可以有多个Tickets。现在我想计算一个事件的总收入。我可以轻松地使用这行代码来计算1个产品的总收入,如下所示:

Product.objects.annotate(
    revenue = ExpressionWrapper(Count('tickets')*   F('price'),output_field=DecimalField()),
)

但是,如果我尝试计算事件中所有产品的总收入,它就不起作用。这些是我的模特:

class Event(models.Model):
    name = models.CharField(max_length=100)
    city = models.CharField(max_length=30)
    created = models.DateTimeField(auto_now_add=True)

class Product(models.Model):
    name = models.CharField(max_length=50)
    amount = models.IntegerField()
    price = models.DecimalField(max_digits=5, decimal_places=2)
    event = models.ForeignKey(Event,related_name='products')

class Ticket(models.Model):
    buyername = models.CharField(max_length=50)
    buyeremail = models.EmailField(max_length=254)
    product = models.ForeignKey(Product,related_name='tickets')

1 个答案:

答案 0 :(得分:0)

这为您提供了一个事件的查询集,其中添加了GetEnumerator字段,该字段是与每个事件相关的故障单的所有价格的总和

revenue

有关详细信息,请参阅官方Django docs