过滤Django Queryset,只返回登录用户的追随者



我正在尝试如何使用Django Rest Framework过滤登录用户后面的人/登录用户后面跟着的人。然而,我似乎返回的只是所有被任何用户跟踪或正在跟踪任何用户的用户,这并不是登录用户特有的(前端视图(数字是用户PK(,API视图(。

我通过AJAX调用与登录用户的pk进行GET请求,但似乎无法专门针对该请求进行筛选。如果有任何帮助,我将不胜感激!

这是我的型号:

class UserConnections(models.Model):
follower = models.ForeignKey(User, related_name="following", on_delete=models.CASCADE)
followed = models.ForeignKey(User, related_name="followers", on_delete=models.CASCADE)

以下是相关的序列化程序:

class UserConnectionListSerializer(serializers.ModelSerializer):
class Meta:
model = UserConnections
fields = ['follower','followed']
class UserConnectionSerializer(serializers.ModelSerializer):
class Meta:
model = UserConnections
fields = '__all__'
depth = 2

这是视图.py

# gets list of who logged in user is following
class FollowingViewSet(viewsets.ModelViewSet):
serializer_class = serializers.UserConnectionListSerializer
queryset = UserConnections.objects.all()
def get_serializer_class(self):
if self.request.method == 'GET':
return serializers.UserConnectionSerializer
return self.serializer_class
def get_followers(request):
if request.method == "GET":
user_id = self.request.GET.get('current_user_id', None)
return UserConnections.objects.filter(follower__id=user_id)

# gets list of followers who follow logged-in user
class FollowerViewSet(viewsets.ModelViewSet):
serializer_class = serializers.UserConnectionListSerializer
queryset = UserConnections.objects.all()
def get_serializer_class(self):
if self.request.method == 'GET':
return serializers.UserConnectionSerializer
return self.serializer_class
def get_followers(request):
if request.method == "GET":
user_id = self.request.GET.get('current_user_id', None)
return UserConnections.objects.filter(followed__id=user_id)

您需要覆盖get_queryset:

class FollowingViewSet(viewsets.ModelViewSet):
...
# The indentation is in `class` level
def get_queryset(self):
user_id = self.request.GET.get('current_user_id', None)
return UserConnections.objects.filter(follower__id=user_id)

对于FollowerViewSet:

class FollowerViewSet(viewsets.ModelViewSet):
...
def get_queryset(self):
user_id = self.request.GET.get('current_user_id', None)
return UserConnections.objects.filter(followed__id=user_id)

最新更新