2009-08-06 5 views
1

J'ai un modèle Django appelé Collection qui représente une collection d'éléments (CollectionItem). Chaque collection contient uniquement des éléments d'un type spécifique. (CollectionItem a une clé étrangère à Collection). Je veux obtenir tous les CollectionItems qui sont dans les listes à indicateur public d'un type spécifique et les renvoyer triés par un champ particulier. Voici le code de requête que j'utiliser:Est-ce que concaténer Django QuerySets dans une boucle la bonne chose à faire?

lists = Collection.objects.filter(is_public=True, type=7) 
items = CollectionItem.objects.none() 
for list in lists: 
    items |= CollectionItem.objects.filter(collection=list) 
items = items.order_by('name') 

je dois imaginer que ce ne sera pas l'échelle bien du tout quand j'ai une grande base de données avec des tonnes de listes et d'articles. Y a-t-il une meilleure façon de le faire dans Django? Ou est l'inefficacité impliquée dans la boucle de requête assez négligeable par rapport à d'autres options que je ne devrais pas trop m'inquiéter?

Répondre

8

On dirait que vous avez juste besoin:

items = CollectionItem.objects.filter(
        collection__is_public=True, collection__type=7 
       ).order_by('name') 
+0

Nice, je vous remercie. C'est beaucoup plus joli. –