#django-rest-framework #django-views #django-class-based-views #django-serializer
#django-rest-framework #django-представления #django-class-based-views #django-serializer
Вопрос:
То, что я пытаюсь сделать, это установить атрибут serializer_class через метод get_serializer_class следующим образом
if user.role==1 :
return adminLoanView
elif user.role==2 :
return agentLoanView
else:
return customerLoanView
И в функции def put() используйте эти сериализаторы на основе зарегистрированного пользователя для выполнения другой функции, то есть администратор и агент могут редактировать только определенные поля. И клиент не может ничего редактировать.
Я все еще новичок в DRF, поэтому дайте мне знать, если есть какой-либо другой лучший способ сделать это.
Ответ №1:
Если вы используете собственную User
модель Django, в которой есть .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
Если у вас есть пользовательская модель пользователя с a OnetoOneField
в User
модели, вы можете получить доступ к этому экземпляру через user
экземпляр в представлении, а затем проверить условия разрешений.