2010-08-25 11 views
3

Comment puis-je compter des objets liés à Django (en moins de N requêtes, où N est le numéro d'objet). Pour clarifier, disons que j'ai les tables A et B. Chaque B est connecté exactement à un A. Approche j'ai essayé:compter Django objets liés

A.objects.select_related().filter(attr=val) 
A[i].B_set.count() 

Bien sûr, pour chaque A [i] Je veux savoir nombre de B objets Django exécute une requête. Donc, la question est: y a-t-il un moyen d'optimiser cela?

Répondre

10

N'a pas essayé combien de requêtes sont exécutées, mais la façon de djano devrait utiliser annotate() quelque chose comme:

q = A.objects.select_related().annotate(num_B=Count('B')) 
print A[0].num_B 
+0

Cela peut être une question stupide, mais j'obtiens l'erreur disant que le nom global 'Count' n'est pas défini lors de cette opération. – Seaux

+5

nvm, trouvé la réponse: à partir de django.db.models import Count – Seaux

3

Je dois répondre à ma propre question :) Si l'objet A est interrogé quelque chose comme ceci: Cela crée une requête très longue, mais au moins il y en a une seule.

Questions connexes