2012-01-11 3 views
1

J'ai la structure de modèle suivante Pays, Ville (fk = pays) et École (fk = ville). Maintenant, je veux obtenir la liste des pays avec la ville, si la ville a une école. Dans mon modèle, je veux faireRequête Django pour 3 tables

for country in countrylist 
    for city in getcitieswithschool 

Puis-je obtenir des résultats avec une requête?

Répondre

2

Obtenir les villes avec

City.objects.filter(school__isnull=False).distinct().select_related('country') 

Puis {% regroup %} les par country et il sera propre et efficace.

+0

Merci beaucoup !! tout simplement génial! Je n'ai jamais su regrouper – John

1

Vous pouvez obtenir les utiliser cette requête

from django.db.models import Count 

countrylist = Country.objects.all()\ 
    .annotate(cities_cnt=Count('city'), schools_cnt=Count('city__school'))\ 
    .filter(cities_cnt__gt=0, schools_cnt__gt=0) 
+0

merci, mais la réponse @DrTyrsa a fonctionné pour moi – John