2016-08-08 4 views
0

방금 ​​장고 레스트 프레임 워크로 시작 했으므로 정확히 무슨 일이 벌어지는 지 아직 확실하지 않습니다. 그러나 나는 사용자 모델, 친구 모델 및 포스트 모델을 가지고 있으며, 필자는 시리얼 라이저와 뷰를 순서대로 가지고있다. 하지만 내 사용자의 친구에게서 모든 게시물을 반환하는 방법을 알아낼 수는 없습니다. 어떤 도움이라도 대단히 감사하겠습니다.Django-DRF 친구로부터 모든 게시물보기

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 

답변

1

, 그래서 당신이해야 할 일을

먼저 모든 것을 얻는다. 전자의 친구, 당신은 here

friends = <user_objects>.Friendship_set.all() 

를 사용하여 더 읽기 것을 할 수 있습니다.

이제 특정 사용자의 모든 친구가 있으며 ID를 숨기고 목록 필터를 사용합니다.

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

외래 키 속성 필터링에 대해서는 this answer을 참조하십시오.

+0

굉장히 고마워. – ngx311

관련 문제