在 DRF 中获取序列化程序列表时出现 TypeError
Posted
技术标签:
【中文标题】在 DRF 中获取序列化程序列表时出现 TypeError【英文标题】:TypeError when getting serializer list in DRF 【发布时间】:2020-03-01 20:34:23 【问题描述】:我正在使用 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)
]
我正在尝试任何方法,但我无法修复错误。帮我解决,谢谢。
【问题讨论】:
请包括回溯,但我想这是permission_classes
,它应该是一个可迭代的,而不是一个单一的类
你能解释一下为什么包含回溯吗??
traceback 表示您收到的完整错误消息。请edit您的问题并添加。
【参考方案1】:
permission_classes
必须是可迭代对象。所以在你看来,把它改成
permission_classes = (BasePermissionMetaclass,)
【讨论】:
【参考方案2】:您需要像这样定义类permission_classes:
permission_classes = [BasePermissionMetaclass,]
【讨论】:
以上是关于在 DRF 中获取序列化程序列表时出现 TypeError的主要内容,如果未能解决你的问题,请参考以下文章
仅在访问媒体文件时出现 Cors Header 错误,应用程序的其余部分工作正常(DRF、pythonanywhere、React)
在应用程序资源文件夹中获取文件列表时出现 Cocoa 错误 256