Django 条件聚合

1 投票
1 回答
810 浏览
提问于 2025-04-15 12:08

有没有人知道怎么通过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(...

撰写回答