2010-12-15 72 views
1

disent que j'ai deux modèles, celui lié à l'autre par clé étrangère comme ceci:Après une relation en arrière, et annoter les résultats

class Tourist(models.Model): 
    age = models.IntegerField() 

class Country(models.Model): 
    tourist = models.ForeignKey(Tourist) 

Je sais que je peux travailler à rebours à partir du Tourisme à savoir combien de pays il a été à l'aide:

t = Tourist.objects.all()[0] 
t.country_set.count() 

Mais est-il possible d'annoter le nombre de pays qui un touriste a visité? Ce serait cool si je pouvais faire quelque chose comme

Tourist.objects.annotate(countries_visited=country_set.count()) 

Je sais que le dernier bit de « code », il n'a pas de sens, mais je compte sur lui pour transmettre les désirs de mon cœur. Je sais que je pouvais faire quelque chose comme ceci:

[(t.pk, t.country_set.count()) for t in Tourist.objects.all()] 

Mais je me demande s'il y a une meilleure façon de le faire. Merci!

Répondre

2

Vous êtes déjà proche.

from django.db.models import Count 

Tourist.objects.annotate(countries_visited=Count('country')) 

fait ce que vous voulez, même si vous suivez la relation en arrière.

+0

Whoa c'est génial! Merci Breezy! – IntrepidDude