如何用序列化器实现,当管理员用户请求时,序列化所有字段,而普通用户请求,序列化部分字段?

2024-09-28 18:55:23 发布

您现在位置:Python中文网/ 问答频道 /正文

如何用序列化器实现,当管理员用户请求时,序列化所有字段,而普通用户请求时,序列化Rest框架中的部分字段?在

在我的序列化程序中:

class UserListSerializer(ModelSerializer):
    """
    user serializer
    """
    account = AccountSerializer(many=False, read_only=True)
    class Meta:
        model = User
        exclude = [
            'password',
        ]
...

class AccountSerializer(ModelSerializer):
    """
    user's accout
    """
    class Meta:
        model = Account
        exclude = [
            'total_charge',
            'total_consume',
        ]

在视图中:

^{pr2}$

我的要求是,当我使用普通用户请求APIView时,我希望排除以下字段:

'total_charge','total_consume'

如果我使用管理用户请求APIView,我想序列化所有字段。在


编辑

我添加了get_serializer_class方法:

class UserListAPIView(ListAPIView):
    """
    返回普通用户列表
    """
    queryset = User.objects.filter(is_admin=False, is_staff=False, is_superuser=False).exclude(status=4)

    filter_backends = [SearchFilter, OrderingFilter]
    search_fields = ['username', 'qq', 'email']
    pagination_class = UserPageNumberPagination

    class Meta:
       ordering = ['-id']

    def get_serializer_class(self):
        if self.request.user.is_superuser:
            return UserAdminListSerializer
        else:
            return UserListSerializer

    serializer_class = get_serializer_class()  # if I put this line in the front of `def get_serializer_class(self)` I will get not find error.

当我运行服务器时,会出现以下问题:

回溯:

 File "/Users/xsx/Desktop/xsx/Project/xss/qiyun_admin_usermanage/api/views.py", line 40, in <module>
    class UserListAPIView(ListAPIView):
  File "/Users/xsx/Desktop/xsx/Project/xss/qiyun_admin_usermanage/api/views.py", line 59, in UserListAPIView
    serializer_class = get_serializer_class()
TypeError: get_serializer_class() missing 1 required positional argument: 'self'

Tags: selffalseget序列化adminisexcludemeta
1条回答
网友
1楼 · 发布于 2024-09-28 18:55:23

您可以创建两个序列化程序并像这样重写视图中的get_serializer_class。在

def get_serializer_class(self):
    if self.request.user.is_superuser:
        return FullAccountSerializer
    return BasicAccountSerializer

相关问题 更多 >