如何覆盖 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
实例访问该实例,然后检查权限条件。
我想做的是通过这样的 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
实例访问该实例,然后检查权限条件。