如何用序列化器实现,当管理员用户请求时,序列化所有字段,而普通用户请求时,序列化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'
您可以创建两个序列化程序并像这样重写视图中的
get_serializer_class
。在相关问题 更多 >
编程相关推荐