2010-11-26 2 views
5

Die Site, die ich erstelle, erlaubt es Benutzern, "Posts" zu erstellen und hat ein Twitter-ähnliches Konzept von Followed-Benutzern. Für einen bestimmten Benutzer möchte ich alle Posts der Benutzer anzeigen, denen sie folgen.Erhalte alle Objekte, die durch eine Django ManyToManyField-Beziehung definiert sind

Hier meine vereinfachte Modelle sind:

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() 

Frage: Wie erstellen Sie eine queryset aller Beitrags Objekte aus dem Benutzer, dass ein gegebener User folgt?

Ich glaube, ich habe es komplizierter gemacht, indem ich die "follow" -Beziehung auf UserProfile erstellt habe, was nicht das Modell mit der ForeignKey-Beziehung mit Posts ist.

UPDATE! Hier ist die Antwort:

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

Antwort

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

Ich erhalte eine Typeerror: 'ManyRelatedManager' Objekt ist nicht iterable – mitchf

+0

oh, ich vergaß. Nach "following" addiere .all(), wie "UserProfile.objects.get (user = your_user_object) .following.all()". Wenn es nicht funktioniert, ändern Sie es in following.objects.all(). Ich erinnere mich nicht genau. – werehuman

+0

Danke, das hat den TypeError behoben, aber etwas ist immer noch nicht ganz richtig, da es einen leeren Satz zurückgibt. – mitchf

Verwandte Themen