2010-11-26 2 views
5

Le site que je suis en train de créer permet aux utilisateurs de créer des "posts" et a un concept similaire à celui de Twitter des utilisateurs suivis. Pour un utilisateur donné, j'aimerais montrer tous les messages des utilisateurs qu'ils suivent.Obtention de tous les objets définis par une relation Django ManyToManyField

Voici mes modèles simplifiés:

class User 
    # a standard django.contrib.auth user model 

class UserProfile(models.Model): 
    # my AUTH_PROFILE_MODULE for django-profiles 
    user = models.ForeignKey(User, unique=True) 
    following = models.ManyToManyField('self', symmetrical=False, related_name="followed_by") 

class Posts(models.Model): 
    user = models.ForeignKey(User) 
    post = models.TextField() 

Question: Comment créer un queryset de tous les objets Publier des utilisateurs qu'un utilisateur donné suit?

Je pense que je l'ai rendu plus compliqué en créant la relation "follow" sur UserProfile, qui n'est pas le modèle avec la relation ForeignKey avec Posts.

MISE À JOUR! Voici la réponse:

Posts.objects.filter(user__userprofile__in=UserProfile.objects.get(user=your_user_object).following.all()) 

Répondre

7
Posts.objects.filter(user__in=UserProfile.objects.get(user=your_user_object).following) 
+0

Je reçois TypeError: objet 'ManyRelatedManager' est pas itérables – mitchf

+0

oh, j'ai oublié. Après "suivi" ajoutez .all(), comme "UserProfile.objects.get (utilisateur = votre_utilisateur_utilisateur) .suivant.all()". Si cela ne fonctionne pas, remplacez-le par following.objects.all(). Je ne me souviens pas exactement. – werehuman

+0

Merci, cela a corrigé le TypeError, mais quelque chose n'est toujours pas correct car il retourne un ensemble vide. – mitchf

Questions connexes