2009-08-18 8 views
0

S'il existe des modèles comme ci-dessous:Django ORM requêtes

class Donation(models.Model): 
    user = FKey(User) 
    project = FKey(Project) 
    ... 

class Campaign(models.Model): 
    user = Fkey(User) 
    project = FKey(Project) 
    ... 

class Project(models.Model) 
     ... 

Quelle est la requête ORM django plus simple pour trouver une liste de tous les projets qu'un utilisateur donné est associé.

Une solution directe consiste à obtenir tous les identifiants des projets à partir des deux modèles et à interroger le modèle Projets pour les identifiants donnés.

Mais il doit y avoir de meilleures solutions.

Répondre

2

Le plus simple de procéder requête ORM directe, peut être,

from django.db.models import Q 

Project.objects.filter(
Q(id__in=Campaign.objects.filter(user=SomeUser).values('project')) | 
Q(id__in=Donation.objects.filter(user=SomeUser).values('project')) 
) 
0

Je pense que nous ne pouvons pas fusionner Campaign QuerySet et Donation donc nous devons le faire en 2 étapes:

Project.objects.filter(id = Campaign.objects.filter(user = searchedUser)) 
Project.objects.filter(id = Donation.objects.filter(user = searchedUser)) 

et maintenant u peut divorcer dans votre page Campagne et Don dans ce que l'utilisateur a donc il partie est l'avantage :)

Questions connexes