Как изменить разрешение на основе request.query_params в Django rest frameworks?
Я объединил два представления, которые делают почти одно и то же, за исключением разрешения, я хочу изменить разрешение на основе: если company id находится в параметрах. Если нет, то использовался бы простой класс IsAuthenticated и также создавалось разрешение для IsCompany.
class FilesView(ListAPIView):
serializer_class = FileSerializer
permission_classes = (IsAuthenticated,)
...
def get_queryset(self):
if 'company' in self.request.query_params:
# In this case I want the IsCompany Permission class
return get_company_files(self)
# Otherwise the regular one
return get_personal_files(self)
Смотрите настраиваемые разрешения в документации DRF.
Небольшой пример:
from rest_framework import permissions
class IsCompanyRequestBasedPermission(permissions.BasePermission):
message = '<description of your permission>'
def has_permission(self, request, view):
if 'company' in self.request.query_params:
# Make your decision.
И затем добавьте его в permission_classes
. Это будет работать так, как вы ожидаете.
Если вы используете
class FilesView(ModelViewSet):
вместо
class FilesView(ListAPIView)
вы можете использовать метод get_serializer_class, который может вам помочь. Например
def get_serializer_class(self):
if "your statement":
return "FirstSerializer"
if "your statement":
return "SecondSerializer"