2009-06-09 9 views
1

Est-ce que quelqu'un sait comment je pourrais, à travers l'ORM django, produire une requête qui agrégerait conditionnellement les modèles liés? Imaginons, par exemple, que vous ayez un site qui vend des articles et que vous vouliez savoir combien chaque employé a vendu au cours des sept derniers jours. Il est assez simple de le faire sur toutes les ventes:Django agrégation conditionnelle

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

modèles supposant des employés et la vente avec un grand nombre à plusieurs entre eux. OK, mais maintenant comment puis-je contraindre cela à toutes les ventes pour les sept derniers jours (ou tout délai arbitraire)? Est-ce que quelqu'un sait?

+0

Demandez-vous à propos de SELECT SUM (VENTE) Requêtes GROUP BY EMPLOYEE? –

Répondre

2

Très bien, je suppose que je n'ai pas pensé à ça très loin. Je ne savais pas que le filtre a traité les choses avec une jointure gauche (bien que la réflexion à ce sujet, sinon comment serait-il la carte à la DB?), Donc la réponse est évidente:

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