Django 条件聚合
有没有人知道怎么通过Django的ORM来写一个查询,能够根据条件聚合相关的模型?
举个例子,假设你经营一个卖东西的网站,你想知道每个员工在过去七天里卖了多少东西。对所有的销售记录进行统计其实很简单:
q = Employee.objects.filter(type='salesman').annotate(total_sales = models.Sum('sale__total'))
假设有员工(Employee)和销售(Sale)这两个模型,它们之间是多对多的关系。好吧,但现在我想知道怎么把这个限制在过去七天的所有销售记录上(或者任何自定义的时间范围)?有没有人知道怎么做?
1 个回答
2
好吧,我想我没有想得很周全。我没意识到filter是通过左连接来处理数据的(不过仔细想想,除了这样,它怎么能和数据库对应呢?),所以显而易见的答案是:
Employee.objects.filter(type='salesman').filter(sale__timestamp__gte = start_date)\
.exclude(sale__timestamp__gte = end_date).annotate(...