Salut à tous!

Cela fait maintenant 2 ans que j'utilise pas mal Django mais je reste bloqué sur un GROUP BY.

Ma Queryset est la suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
crm_models.Contact.objects\
.filter(dealercontact__dealer__pk__in=(265,),
         dealercontact__activity='gardening',
         date_data_collected__gte=datetime.date(2012,10,1),
         date_data_collected__lt=datetime.date(2013,10,1))\
.annotate(nb_rels=Count('dealercontact'))
ce qui me donne la requête MySQL suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
SELECT *
FROM `contact` 
LEFT OUTER JOIN `dealer_contact` ON (`contact`.`id_contact` = `dealer_contact`.`id_contact`) 
WHERE (`dealer_contact`.`active` = True 
   AND `dealer_contact`.`activity` = 'gardening'  
   AND `contact`.`date_data_collected` >= '2012-10-01'  
   AND `contact`.`date_data_collected` < '2013-10-01'
   AND `dealer_contact`.`id_dealer` IN (265)) 
GROUP BY `contact`.`id_contact`
ORDER BY NULL;
J'aurais exactement les Contacts recherchés si je pouvais ajouter la clause HAVING suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
HAVING SUM(IF(`dealer_contact`.`type`='customer', 1, 0)) = 0
Comment est-ce que cela pourrait être régler avec une Queryset? J'ai le bon résultat avec une Raw Query mais je dois pouvoir profiter des fonctionnalités d'une Queryset dans mon code par la suite.

J'utilise le annotate pour que Django ajoute un GROUP BY à la requête générée. J'ai tenté d'utiliser un extra avec select = {"alias" : "SUM(IF...)"} mais j'ai obtenu l'erreur suivante: DatabaseError: (1111, 'Invalid use of group function').

Merci d'avance pour votre aide!!!
Quentin