Python AttributeError:type object';ListViewSet';没有属性';获得额外的行动';
我正在尝试构建一个scrumboard django应用程序,它基本上包含卡片和列表。我无法解决以下问题Python AttributeError:type object';ListViewSet';没有属性';获得额外的行动';,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在尝试构建一个scrumboard django应用程序,它基本上包含卡片和列表。我无法解决以下问题 Unhandled exception in thread started by <function check_errors <locals>.wrapper at 0x0000000003DF7C80> Traceback (most recent call last): File "C:\Users\...\lib\site- packages\django
Unhandled exception in thread started by <function check_errors
<locals>.wrapper
at 0x0000000003DF7C80>
Traceback (most recent call last):
File "C:\Users\...\lib\site-
packages\django\utils\autoreload.py",
line 225, in wrapper
fn(*args, **kwargs)
...
urlpatterns = router.urls
File "C:\Users\...\lib\site-
packages\rest_framework\routers.py", line 101, in urls
self._urls = self.get_urls()
File "C:\Users\...\lib\site-
packages\rest_framework\routers.py", line 363, in get_urls
urls = super(DefaultRouter, self).get_urls()
File "C:\Users\...\lib\site-
packages\rest_framework\routers.py", line 261, in get_urls
routes = self.get_routes(viewset)
File "C:\Users\...lib\site-packages\rest_framework\routers.py",
line 176, in get_routes
extra_actions = viewset.get_extra_actions()
AttributeError: type object 'ListViewSet' has no attribute
'get_extra_actions'
My api.py,其中定义了我的视图集
from rest_framework.viewsets import ModelViewSet
from drf_multiple_model.views import ObjectMultipleModelAPIView
from .serializers import ListSerializer, CardSerializer
from .models import List, Card
class ListViewSet(ModelViewSet):
queryset = List.objects.all()
serializer_class = ListSerializer
class CardViewSet(ModelViewSet):
queryset = Card.objects.all()
serializer_class = CardSerializer
class ListViewSet(ObjectMultipleModelAPIView):
querylist = [
{
'queryset': List.objects.all(),
'serializer_class': ListSerializer
},
{
'queryset': Card.objects.all(),
'serializer_class': CardSerializer
}
]
异常所在的URL.py文件
from .api import ListViewSet, CardViewSet
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'lists', ListViewSet, base_name='List')
router.register(r'cards', CardViewSet, base_name='Card')
urlpatterns = router.urls
我是django的新手,我正在教程的帮助下开发这个。我一直在努力寻找解决办法,但我很不幸找到了解决办法,所以我把它贴在了这里
非常感谢
编辑:
serializers.py文件
from rest_framework import serializers
from .models import List, Card
class CardSerializer(serializers.ModelSerializer):
class Meta:
model = Card
fields = '__all__'
class ListSerializer(serializers.ModelSerializer):
class Meta:
model = List
fields = '__all__'
版本,
Django==2.1.2
djangorestframework==3.8.2我认为最可能的原因是,
django rest多模型
ObjectMultipleModelAPIView
不是ViewSet
的子类,而是GenericAPIView
的子类,而get\u extra\u actions
方法是在rest框架ViewSetMixin
class()上定义的
您应该将
ObjectMultipleModelAPIView
更新为ObjectMultipleModelAPIViewSet
,并希望它能与DefaultRouter
一起工作。我认为最可能的原因是django rest多模型ObjectMultipleModelAPIView
不是视图集的子类,它是GenericAPIView
的子类,而get\u extra\u actions
方法是在rest框架ViewSetMixin
class()上定义的
您应该将ObjectMultipleModelAPIView
更新为ObjectMultipleModelAPIViewSet
,并且它应该能够与DefaultRouter
一起工作。您可以添加ListSerializer
类吗?您有两个名为ListViewSet
的类。这是个问题。此外,您正在使用一个名为drf\u multiple\u model
的库。您确定正确使用了它吗?如果ListViewSet
不是ModelViewSet
的子类,则不能使用router。向它注册。@JPG我已经添加了class@HåkenLid感谢您的评论。我试图将两个模型结合起来,得到一个JSONAPI,这就是为什么我要使用“drf_multiple_model”库。我想我没有正确使用那个图书馆。我评论说,代码现在恢复正常了,我将找到其他方法来获取单个JSON api文件。您可能可以使用它,但不能与路由器一起使用。注册。相反,为该视图创建一个常规的django路由,并附加到urlpatterns
列表中。请参阅有关的drf文档。您可以继续使用路由。为您的ModelViewSet类注册。是否可以添加ListSerializer
类?您有两个名为ListViewSet
的类。这是个问题。此外,您正在使用一个名为drf\u multiple\u model
的库。您确定正确使用了它吗?如果ListViewSet
不是ModelViewSet
的子类,则不能使用router。向它注册。@JPG我已经添加了class@HåkenLid感谢您的评论。我试图将两个模型结合起来,得到一个JSONAPI,这就是为什么我要使用“drf_multiple_model”库。我想我没有正确使用那个图书馆。我评论说,代码现在恢复正常了,我将找到其他方法来获取单个JSON api文件。您可能可以使用它,但不能与路由器一起使用。注册。相反,为该视图创建一个常规的django路由,并附加到urlpatterns
列表中。请参阅有关的drf文档。您可以继续使用路由。为您的ModelViewSet类注册。
from rest_framework import serializers
from .models import List, Card
class CardSerializer(serializers.ModelSerializer):
class Meta:
model = Card
fields = '__all__'
class ListSerializer(serializers.ModelSerializer):
class Meta:
model = List
fields = '__all__'