首页 > 解决方案 > 在 DRF 中获取序列化程序列表时出现 TypeError

问题描述

我正在使用 Django Rest 框架作为 API。当我向 API 发送 GET 请求以获取类别列表时,出现以下错误

回溯(最近一次通话最后):
  文件“E:\env_django\lib\site-packages\django\core\handlers\exception.py”,第 34 行,在内部
    响应 = get_response(请求)
  _get_response 中的文件“E:\env_django\lib\site-packages\django\core\handlers\base.py”,第 115 行
    response = self.process_exception_by_middleware(e, request)
  _get_response 中的文件“E:\env_django\lib\site-packages\django\core\handlers\base.py”,第 113 行
    响应 = Wrapped_callback(request, *callback_args, **callback_kwargs)
  文件“E:\env_django\lib\site-packages\django\views\decorators\csrf.py”,第 54 行,位于 Wrapped_view
    返回 view_func(*args, **kwargs)
  文件“E:\env_django\lib\site-packages\rest_framework\viewsets.py”,第 114 行,在视图中
    return self.dispatch(request, *args, **kwargs)
  文件“E:\env_django\lib\site-packages\rest_framework\views.py”,第 505 行,在调度中
    响应 = self.handle_exception(exc)
  文件“E:\env_django\lib\site-packages\rest_framework\views.py”,第 465 行,在 handle_exception 中
    self.raise_uncaught_exception(exc)
  文件“E:\env_django\lib\site-packages\rest_framework\views.py”,第 476 行,在 raise_uncaught_exception
    提高 exc
  文件“E:\env_django\lib\site-packages\rest_framework\views.py”,第 493 行,在调度中
    self.initial(请求,*args,**kwargs)
  文件“E:\env_django\lib\site-packages\rest_framework\views.py”,第 411 行,初始
    self.check_permissions(请求)
  文件“E:\env_django\lib\site-packages\rest_framework\views.py”,第 331 行,在 check_permissions
    在 self.get_permissions() 中获得许可:
  文件“E:\env_django\lib\site-packages\rest_framework\views.py”,第 278 行,在 get_permissions
    return [permission() 获取 self.permission_classes 中的权限]
TypeError:“类型”对象不可迭代

api/serializer.py

from rest_framework import serializers
from ..models import (
    Category,
)


class CategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = Category
        fields = '__all__'

api/views.py

class CategoryListView(viewsets.ModelViewSet):
    queryset = Category.objects.all()
    serializer_class = CategorySerializer
    permission_classes = BasePermissionMetaclass

    def get_queryset(self):
        queryset = Category.objects.all()
        return queryset

    def list(self, request, *args, **kwargs):
        queryset = Category.objects.all()
        serializer = CategorySerializer(queryset, read_only=True, many=True)
        return Response(serializer.data)

api/views.py

from django.urls import path
from . import views


category = views.CategoryListView.as_view({
    'get': 'list'
})

urlpatterns = [
    path('api/v1/login', views.login),
    path('api/v1/category', category)
]

我正在尝试任何方法,但我无法修复错误。帮我解决,谢谢。

标签: pythondjango-rest-framework

解决方案


permission_classes必须是可迭代对象。因此,在您看来,将其更改为

permission_classes = (BasePermissionMetaclass,)

推荐阅读