【问题标题】:Django-DRF See all posts from friendsDjango-DRF 查看朋友的所有帖子
【发布时间】:2016-12-13 21:23:01
【问题描述】:

我刚开始玩弄 Django Rest 框架,所以我仍然不完全确定到底发生了什么。但是我有一个用户模型、一个朋友模型和一个帖子模型,我还有我的序列化器和视图。但是,我不知道如何返回用户朋友的所有帖子。任何帮助将不胜感激。

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)

序列化器.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

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    这可能会让你开始,

    所以你首先需要做的是得到所有的朋友,你可以通过使用来做到这一点

    friends = <user_objects>.Friendship_set.all()
    

    阅读更多关于here

    现在您拥有该特定用户的所有朋友,隐藏他们的 ID 以列出并使用列表中过滤器。

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

    请参阅this answer 了解外键属性的过滤。

    【讨论】:

      猜你喜欢
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多