2012-06-08 22 views
0

J'ai les modèles suivants.meilleure façon de gérer la requête django

class Model1(models.Model): 
    name = models.CharField() 

class Model2(models.Model): 
    name = models.CharField() 
    model1 = models.ForeignKey(model1) 

class Model3(models.Model): 
    name = models.CharField() 
    model2 = models.ForeignKey(model2) 
    flag = models.BooleanField(blank=False) 

donc mon écran devrait être, Model2.name et Model1.name sur la page d'inscription. conditions sont: je ne dois afficher Model2 instances qui ont au moins un Model3.flag = True

Je suis maintenant obtenir tous les Model2 objets dans la liste et itérer sur Model3. Je ne suis pas en mesure d'utiliser correctement select_related() pour le modèle. Quelqu'un peut-il aider.

merci.

+0

Pourquoi n'êtes-vous pas en mesure de "utiliser correctement select_related()"? On dirait que la meilleure façon ici. – DrTyrsa

+0

S'il vous plaît améliorer votre code comme suggéré dans edit. – okm

Répondre

1

Quelque chose comme:

qs = Model2.objects.filter(model3__flag=True).select_related('model1').distinct() 
for m2 in qs: 
    print m2.model1.name, m2.name 

# only fetch the names, 
# this works if you treat duplicated ('name', 'model1__name') tuples same and show them once. 
qs = qs.values('model1__name', 'name') 
for x in qs: 
    print x['model1__name'], x['name'] 
+0

Il peut y avoir des doublons. – DrTyrsa

+0

@DrTyrsa oui, merci! – okm

Questions connexes