0
votes

I'm using Django Rest Framwork to be API. When I send GET request to API to get Category list, I have gotten following error

Traceback (most recent call last):
  File "E:\env_django\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "E:\env_django\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "E:\env_django\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "E:\env_django\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "E:\env_django\lib\site-packages\rest_framework\viewsets.py", line 114, in view
    return self.dispatch(request, *args, **kwargs)
  File "E:\env_django\lib\site-packages\rest_framework\views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "E:\env_django\lib\site-packages\rest_framework\views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "E:\env_django\lib\site-packages\rest_framework\views.py", line 476, in raise_uncaught_exception
    raise exc
  File "E:\env_django\lib\site-packages\rest_framework\views.py", line 493, in dispatch
    self.initial(request, *args, **kwargs)
  File "E:\env_django\lib\site-packages\rest_framework\views.py", line 411, in initial
    self.check_permissions(request)
  File "E:\env_django\lib\site-packages\rest_framework\views.py", line 331, in check_permissions
    for permission in self.get_permissions():
  File "E:\env_django\lib\site-packages\rest_framework\views.py", line 278, in get_permissions
    return [permission() for permission in self.permission_classes]
TypeError: 'type' object is not iterable

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)
]

I'm trying any ways but I can't fix error. Help me to fix, thanks.

2
Please include the traceback, but I suppose this is permission_classes which should be an iterable and not a single class - awesoon
can you explane why include traceback?? - Huy Vu The
traceback meaning the full error message you get. Please edit your question and add that. - heemayl

2 Answers

0
votes

permission_classes must be iterable object. So in your view, change it to

permission_classes = (BasePermissionMetaclass,)
0
votes

You need to define class permission_classes like this:

permission_classes = [BasePermissionMetaclass,]