2011-06-16 4 views
1

J'ai un modèle d'amitié qui ressemble à ceci:Django: Créez queryset

from_user = ForeignKey(User, related_name='friends') 
to_user = ForeignKey(User, related_name='friends_') 

je un gestionnaire pour obtenir tous les modèles d'amitié d'un utilisateur:

def for_user(self, user): 
    return self.filter(Q(to_user=user) | Q(from_user=user)) 

Alors maintenant, je aime avoir un queryset avec tous les objets utilisateurs qui sont amis. Je pensais juste écrire une simple boucle et les ajouter à une liste, mais ensuite je perds la capacité d'écrire des requêtes. Par exemple pour tous les amis d'un utilisateur je voudrais filtrer/en obtenir un avec un nom d'utilisateur particulier.

Le titre de ma question est un peu générique, donc si quelqu'un connaît un meilleur, n'hésitez pas à le changer.

Répondre

1
User.objects.filter(Q(friends__to_user=someuser)|Q(friends___from_user=someuser)) 

Aucune idée si cette seconde Q() va effectivement travailler, mais c'est ce que vous avez décidé d'appeler le domaine connexe.

+0

Juste pour clarifier le someuser doit être le droit de PK? – Pickels

+0

Non, l'ORM de Django fera le bon choix si c'est un utilisateur. Si vous * avez * le PK, ajoutez simplement '_id' à la fin. –