如何覆盖 APIView 中的 get_serializer_class 以根据特定条件更改基于 class 的视图中的 serializer_class 属性。?

How to override get_serializer_class in APIView to change the serializer_class attribute in a class based view according to a specific condition.?

我想做的是通过这样的 get_serializer_class 方法设置 serializer_class 属性

    if user.role==1 :
      return adminLoanView 
    elif user.role==2 :
      return agentLoanView 
    else:
      return customerLoanView

并且在 def put() 函数中使用这些基于登录用户的序列化程序来执行不同的功能,即管理员和代理只能编辑特定字段。客户无法编辑任何内容。 我仍然是 DRF 的初学者,如果有其他更好的方法,请告诉我。

如果您使用的是 Django 自己的 User 模型,该模型具有 .is_superuser.is_staff 字段,您可以像这样覆盖 get_serializer_class()

def get_serializer_class(self):
    user = self.request.user
    if user.is_superuser:
        return SerializerClassWithHigherPermissions
    elif user.is_staff:
        return SerializerClassWithIntermediatePermissions
    else:
        return SerializerClassWithCustomerPermissions

如果您在 User 模型上有一个带有 OnetoOneField 的自定义用户模型,您可以通过视图中的 user 实例访问该实例,然后检查权限条件。