首页 > 解决方案 > 如何在 django rest 中找到两个用户之间的连接?

问题描述

我有一个追随者系统,在这里我想检查那些追随我的人,我们是否有相互联系。如果他们关注我而我没有关注他们,我想在前端设置跟随。在视图中,我正在获取数据并将它们发送到序列化程序,但我没有,我该如何检查它?我的模型和视图如下:

模型.py

class Follow(models.Model):
    follower = models.ForeignKey(User,on_delete = models.CASCADE,related_name = 'following')
    followee = models.ForeignKey(User,on_delete = models.CASCADE,related_name = 'followers')
    created_at = models.DateTimeField(auto_now_add = True, null = True)
    updated_at = models.DateTimeField(auto_now = True, null = True)
    class Meta:
       unique_together = ("follower", "followee")
       ordering  = ('-created_at',)

视图.py:

class FollowerAPIView(APIView,PaginationHandlerMixin):
    pagination_class = BasicPagination
    serializer_class = UserFollowerSerializer
    def get(self,request,*args,**kwargs):
        follower_qs = Follow.objects.filter(followee = request.user).select_related('follower')
        page = self.paginate_queryset(follower_qs)
        if page is not None:
            serializer = self.get_paginated_response(self.serializer_class(page, many=True).data)
        else:
            serializer = self.serializer_class(follower_qs, many=True)
        return Response(serializer.data,status=status.HTTP_200_OK)

标签: djangodjango-modelsdjango-rest-framework

解决方案


您可以通过在序列化程序中处理它来解决。在 serialier 中有一个名为的参数context,并使用它来检查所需的条件,如下所示:

UserProfileSerializer(serializers.ModelSerializer):
    follow_back = serializers.SerializerMethodField()

    class Meta:
        model = User
        fields = (<user_model_fields>, 'follow_back')

    # have a function here to decide the value of follow back

    def get_follow_back(self, obj):
        user_id = self.context.get('user_id', None) 
        # This is the user id of person fetching the user profile of other person
        if user_id is not None:
            i_follow_user = Follow.objects.filter(follower=obj.id, followee=user_id).first()
            user_follow_me = Follow.objects.filter(followee=obj.id, follower=user_id).first()
            return i_follow_user is None and user_follow_me is not None
        return False

因此,现在当您使用此序列化程序序列化其他人的个人资料时,您必须将您的用户 ID 传递给序列化程序,如下所示:

UserProfileSerializer(other_user_instance, context={'user_id': request.user.id})

这里的 request.user 是经过身份验证的用户或获取他人个人资料的用户。


推荐阅读