2009-04-28 7 views
1

J'ai 2 modèles:Comment interroger filtre django sans plusieurs occurrences

ParentModel: 'juste' se repose là

ChildModel: a une clé étrangère à ParentModel

ParentModel.objects.filter(childmodel__in=ChildModel.objects.all()) donne plusieurs occurrences de ParentModel .

Comment interroger tous les modèles parent ayant au moins un modèle enfant qui s'y réfère? Et sans plusieurs occurrences ...

Répondre

4

Vous l'avez presque raison ...

ParentModel.objects.filter(childmodel__in=ChildModel.objects.all()).distinct() 
0

Vous pouvez éviter d'utiliser childmodel__in=ChildModel.objects.all() si le nombre d'objets ChildModel est grand. Cela va générer du SQL avec tous les identifiants ChildModel énumérés dans une liste, en créant éventuellement une énorme requête SQL.

Si vous pouvez utiliser Django 1.1 with aggregation support, vous pouvez faire quelque chose comme:

ParentModel.objects.annotate(num_children=Count('child')).filter(num_children__gte=1) 

qui devrait générer une meilleure SQL.

Questions connexes