AttributeError: тип объекта «ListViewSet» не имеет атрибута «get_extra_actions» - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь создать приложение 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\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'

Ниже приводится мой models.py

from django.db import models
class  List(models.Model):
    name = models.CharField(max_length=50)
    def __str__(self):
        return "List : {}".format(self.name) # returns list values

class Card(models.Model): 
    title = models.CharField(max_length=100)
    description = models.TextField(blank=True) 
    list = models.ForeignKey(
        List, 
        related_name = "card",
        on_delete=models.PROTECT
    ) 
    story_points = models.IntegerField(null=True, blank = True)
    business_value = models.IntegerField(null=True, blank = True)
    def __str__(self):
        return "Card : {}".format(self.title)

Мой 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
        }
    ]

файл urls.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

1 Ответ

0 голосов
/ 19 октября 2018

Я думаю, что наиболее вероятной причиной здесь является то, что django-rest-multiple-models ObjectMultipleModelAPIView не является подклассом ViewSet, это подкласс GenericAPIView, а метод get_extra_actions определен в каркасах отдыха ViewSetMixinкласс (https://github.com/encode/django-rest-framework/blob/3.8.2/rest_framework/viewsets.py#L146)

Вы должны обновить ObjectMultipleModelAPIView до ObjectMultipleModelAPIViewSet, и он должен работать с DefaultRouter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...