2016-08-08 44 views
0

Ich habe gerade angefangen, mit dem Django Rest Framework herumzuspielen, also bin ich mir immer noch nicht ganz sicher, was genau los ist. Aber ich habe ein Benutzermodell, ein Freund-Modell und ein Post-Modell, ich habe auch meine Serialisierer und Ansichten in Reihenfolge. Aber ich kann nicht herausfinden, wie man alle Posts von den Freunden meines Benutzers zurückgibt. Jede Hilfe würde sehr geschätzt werden.Django-DRF Zeige alle Beiträge von Freunde

models.py

class CustomUser(AbstractBaseUser, PermissionsMixin): 
    email = models.EmailField('email address', unique=True, db_index=True) 
    password1 = models.CharField(max_length=50) 
    username = models.CharField('username', max_length=50, unique=True, db_index=True) 
    image = models.FileField(upload_to='photos', null=True, blank=True) 
    joined = models.DateTimeField(auto_now_add=True) 
    is_active = models.BooleanField(default=True) 
    is_admin = models.BooleanField(default=False) 
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now) 

    USERNAME_FIELD = 'username' 
    REQUIRED_FIELDS = [] 

    objects = CustomUserManager() 

    def __unicode__(self): 
     return self.username 

    class Meta: 
     unique_together = (('username', 'password1'),) 



class Friendship(models.Model): 
    created_at = models.DateTimeField(auto_now_add=True, editable=False) 
    creator = models.ForeignKey(CustomUser, related_name="friendship_creator") 
    friend = models.ForeignKey(CustomUser, related_name="friends") 


class Post(models.Model): 
    poster = models.ForeignKey(CustomUser) 
    body = models.CharField(max=200) 

    def save(self, *args, **kwargs): 
     super(Post, self).save(*args, **kwargs) 

serializers.py

class FriendSerializer(HyperlinkedModelSerializer): 
    class Meta: 
     model = Friendship 
     fields = ('creator', 'friend', 'created_at') 
     readonly_fields = 'created_at' 


class CustomUserSerializer(HyperlinkedModelSerializer): 
    friends = FriendSerializer(many=True) 

    class Meta: 
     model = CustomUser 
     fields = ('email', 'username', 'password1', 'image', 'friends') 
     readonly_fields = 'image' 

views.py

class FriendViewSet(ModelViewSet): 
    queryset = CustomUser.objects.all() 
    serializer_class = FriendSerializer 


class UserProfileViewSet(RetrieveModelMixin, UpdateModelMixin, GenericViewSet): 
    queryset = CustomUser.objects.all() 
    serializer_class = CustomUserSerializer 

Antwort

1

Dieses erhalten Sie möglicherweise gestartet,

Also, was Sie tun müssen, Zuerst ist alles zu bekommen e Freunde, können Sie das tun, indem Sie

friends = <user_objects>.Friendship_set.all() 

Lesen Sie mehr über here ist.

Jetzt, da Sie alle Freunde dieses bestimmten Benutzers haben, konvertieren Sie ihre IDs, um den Listenfilter aufzulisten und zu verwenden.

Post.objects.filter(poster__id__in=[list_of_ids_of_friends]) 

Siehe this answer zum Filtern auf Fremdschlüsseleigenschaften.

+0

Ehrfürchtig, vielen Dank Mann. – ngx311