django - 如何在 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)
解决方案
您可以通过在序列化程序中处理它来解决。在 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 是经过身份验证的用户或获取他人个人资料的用户。