提问者:小点点

获取has_permission()时缺少1个必需的位置参数:“view”而不是JSON响应


>

  • 获取has_permission()时缺少1个必需的位置参数:“view”而不是JSON响应

    从rest_framework导入过滤器从rest_framework导入视图集从rest_framework.permissions导入

    从apps.fm.models.asset import资产从apps.fm.serializers导入AssetSerializer从django.shortcuts导入渲染,重定向自django.urls导入反向

    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
    

  • 共1个答案

    匿名用户

    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
    

    或者更好,因为您已经在视图集上设置了< code>permission_classes,所以您可以只调用< code>super

    def get_permissions(self):
        uagent = ['Chrome','Firefox']
        if self.request.user_agent.browser.family in uagent:
            return []
        return super().get_permissions()