【问题标题】:I have django rest_framework ListAPIView method which returns me list of users, how I can exclude requesting user from the same user list我有 django rest 框架 ListAPIView 方法,它返回一个用户列表,我如何从同一个用户列表中排除请求用户
【发布时间】:2019-03-03 06:02:44
【问题描述】:

序列化器.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.CustomUser
        fields = ('username', 'email', 'is_active','is_superuser')

views.py

class UserListView(generics.ListAPIView):
    queryset = models.CustomUser.objects.all()
    serializer_class = serializers.UserSerializer

我正在为 URL 使用身份验证令牌,因此我将在标头中包含用户令牌,我可以从中识别和排除,这是我想尝试的。

【问题讨论】:

    标签: django django-rest-framework django-views


    【解决方案1】:

    如下覆盖get_queryset

    class UserListView(generics.ListAPIView):
        serializer_class = serializers.UserSerializer
        def get_queryset(self):
            return CustomUser.objects.exclude(email=self.request.user.email)
    

    我没有测试过代码,但是思路是对的。

    【讨论】:

    • self.request.user 将返回用户实例,而不是代表emailstring
    • 然后 request.user.email :)
    • 你应该在你的答案中改变它:)
    【解决方案2】:

    只需使用exclude而不是all(),只需将您的代码修改为这样的内容

    class UserListView(generics.ListAPIView):
        queryset = models.CustomUser.objects.exclude(username=request.username)
        serializer_class = serializers.UserSerializer
    

    【讨论】:

    • 如果你使用它,它只评估一次,一段时间后视图可能会返回无效结果。
    • @a_k_v 不太明白为什么一段时间后视图可能会返回无效结果?
    • 当您设置查询集时,查询集仅在您启动服务器时创建一次。另一方面,每个请求都会调用 get_queryset 方法。
    • 不,它不会像每次调用此视图都会获取新的 querset 那样工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 2022-01-07
    • 2021-07-30
    • 2022-06-15
    • 2021-09-26
    • 1970-01-01
    • 2015-08-19
    相关资源
    最近更新 更多