Условная агрегация Джанго - PullRequest
1 голос
/ 09 июня 2009

Кто-нибудь знает, как я мог бы через ORM django создать запрос, который условно агрегирует связанные модели?

Допустим, например, что вы управляете сайтом, который продает вещи, и вы хотите знать, сколько продал каждый сотрудник за последние семь дней. Это достаточно просто сделать для всех продаж:

q = Employee.objects.filter(type='salesman').annotate(total_sales = models.Sum('sale__total'))

при условии, что модели «Сотрудник» и «Продажа» связаны между собой отношениями «многие ко многим». Хорошо, но теперь, как бы я ограничил все продажи за последние семь дней (или любые произвольные временные рамки)? Кто-нибудь знает?

1 Ответ

2 голосов
/ 10 июня 2009

Хорошо, я думаю, я не думал об этом слишком далеко. Я не осознавал, что фильтр обрабатывает вещи с левым соединением (хотя подумал над этим, как еще он будет отображаться в БД?), Поэтому очевидный ответ:

Employee.objects.filter(type='salesman').filter(sale__timestamp__gte = start_date)\
        .exclude(sale__timestamp__gte = end_date).annotate(...
...