Получение has_permission() missing 1 required positional argument: 'view' вместо JSON Response
Getting has_permission() missing 1 required positional argument: 'view' instead of JSON Response
from rest_framework import filters from rest_framework import viewsets from rest_framework.permissions import IsAuthenticated
from apps.fm.models.asset import Asset from apps.fm. serializers import AssetSerializer from django.shortcuts import render, redirect from django.urls import reverse
class AssetViewSet(viewsets.ModelViewSet): model = Asset serializer_class = AssetSerializer permission_classes = [IsAuthenticated] filter_backends = [filters.SearchFilter, filters. OrderingFilter] search_fields = ['name'] ordering_fields = ['id'] ordering = ['-id']
def get_permissions(self): uagent = ['Chrome','Firefox'] if self.request.user_agent. browser.family in uagent: return [] return [IsAuthenticated] def retrieve(self, request, *args, **kwargs): instance = self.get_object() uagent = ['Chrome','Firefox'] if self.request.user_agent. browser.family in uagent: authentication_classes = [] #disables authentication permission_classes = [] #disables permission return redirect(reverse("feedback")+"?type=Asset&id="+str(instance.id)) serializer = self.get_serializer(instance) return Response(serializer.data) def get_queryset(self): queryset = self.model.objects.all() return queryset
get_permissions должен возвращать экземпляры ваших классов разрешений, в настоящее время вы возвращаете класс вместо этого
def get_permissions(self):
uagent = ['Chrome','Firefox']
if self.request.user_agent.browser.family in uagent:
return []
return [IsAuthenticated()] # Create an instance of the permission class
Или еще лучше, поскольку вы установили permission_classes на ViewSet, вы можете просто вызвать super
def get_permissions(self):
uagent = ['Chrome','Firefox']
if self.request.user_agent.browser.family in uagent:
return []
return super().get_permissions()
