2008-12-10 9 views
8

J'ai plusieurs modèles et je veux retourner un jeu de requête de tous les modèles appartenant à un utilisateur, je me demande s'il est possible de retourner un jeu de Query à partir de plusieurs modèles?Django Queryset à travers les modèles?

+0

double: http://stackoverflow.com/questions/313137/using-django-how-can-i-combine-two-queries-from-separate-models-into-one-query –

Répondre

8

Je suppose que vous voulez dire que vous voulez renvoyer un seul jeu de requête de tous les objets appartenant à l'utilisateur de chaque modèle.

Avez-vous besoin d'un ensemble de requêtes ou simplement d'un itérable? AFAIK, les qs hétérogènes ne sont pas possibles. Cependant, vous pouvez facilement retourner une liste, un itérateur chaîné (itertools) ou un générateur pour faire ce que vous voulez. Cela suppose que les modèles référençant l'utilisateur sont connus à l'avance. En supposant related_name par défaut, les attributs de QuerySet connexes pourraient être accessibles par exemple utilisateur via le nom du modèle:

qs = getattr(user, '%s_set' % model_name.lower()); 

Bien sûr, en utilisant une liste hétérogène vous soit seulement en mesure d'utiliser des champs ou des méthodes qui sont définies dans tous ces modèles , ou vous devez déterminer le type de chaque objet pour effectuer des actions spécifiques de type.

3

Vos modèles doivent contenir des champs de relation (ForeigKey et ManyToManyField), avec un jeu d'arguments de mot-clé related_name. Consultez la documentation here.

Questions connexes