【问题标题】:How to override get_serializer_class in APIView to change the serializer_class attribute in a class based view according to a specific condition.?如何覆盖 APIView 中的 get_serializer_class 以根据特定条件更改基于类的视图中的 serializer_class 属性。?
【发布时间】:2020-10-22 13:37:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: django-rest-framework django-views django-class-based-views django-serializer


    【解决方案1】:

    如果您使用 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 实例访问该实例,然后检查权限条件。

    【讨论】:

      猜你喜欢
      • 2017-12-22
      • 2021-03-24
      • 2021-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 2010-10-13
      • 2022-11-03
      • 2017-01-04
      相关资源
      最近更新 更多