筛选Django Queryset以仅返回登录用户的追随者
我正在尝试使用Django Rest框架过滤谁跟随登录用户/谁跟随登录用户。但是,我要返回的似乎是被任何用户跟踪或正在跟踪任何用户的所有用户,它不是特定于登录用户(,) 我通过AJAX调用与登录用户的pk一起发出GET请求,但似乎无法专门针对该请求进行过滤。如果有任何帮助,我将不胜感激 这是我的模型:筛选Django Queryset以仅返回登录用户的追随者,django,django-rest-framework,django-views,Django,Django Rest Framework,Django Views,我正在尝试使用Django Rest框架过滤谁跟随登录用户/谁跟随登录用户。但是,我要返回的似乎是被任何用户跟踪或正在跟踪任何用户的所有用户,它不是特定于登录用户(,) 我通过AJAX调用与登录用户的pk一起发出GET请求,但似乎无法专门针对该请求进行过滤。如果有任何帮助,我将不胜感激 这是我的模型: class UserConnections(models.Model): follower = models.ForeignKey(User, related_name="fol
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
这是views.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\u queryset
:
在视图集(viewsets.ModelViewSet)之后分类:
...
#缩进处于“class”级别
def get_queryset(自我):
user\u id=self.request.GET.GET('current\u user\u id',None)
返回UserConnections.objects.filter(follower\u id=user\u id)
对于以下视图集
:
class FollowerViewSet(viewset.ModelViewSet):
...
def get_queryset(自我):
user\u id=self.request.GET.GET('current\u user\u id',None)
返回UserConnections.objects.filter(后面的\u id=user\u id)
为什么定义了一个get\u followers
方法而不在任何地方使用它?为了实现您的目标,请将get\u followers
重命名为get\u queryset
嘿,谢谢您的回复,我尝试了你的建议,但结果没有改变。很遗憾,缩进正确吗?缩进如上图所示。谢谢你,我对这个解决方案所做的唯一更改是将def get_queryset(request)
更改为def get_queryset(self)
,然后它就像一个魔咒一样工作了@维格德夫啊,对不起,我的孩子,谢谢你的帮助!