Django объект ошибки структуры остатка X не имеет атрибута 'get_extra_actions' - PullRequest
0 голосов
/ 22 марта 2020

Я хочу добавить некоторые функции поиска в свой API, и я следовал этому простому руководству , но я все еще получаю сообщение об ошибке

объект типа 'ClientViewSet' не имеет атрибут 'get_extra_actions'


Моя настройка

Версии

  • Django: 2.2.5
  • Django Структура отдыха: 3.11.0
  • Python: 3.8.2

models.py

class Client(models.Model):
    phone = models.CharField(max_length=10)

urls.py

router = routers.DefaultRouter()
router.register(r'clients', ClientViewSet)

urlpatterns = [
    path('api/', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]

serializers.py

class ClientSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Client
        fields = '__all__'

views.py

class ClientViewSet(generics.ListAPIView):
    queryset = Client.objects.all()
    serializer_class = ClientSerializer
    filter_backends = [filters.SearchFilter]
    search_fields = ['phone']

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

Чтобы построить ответ, предоставленный здесь , ViewSet должен наследоваться от ViewSet, а класс ListAPIView не наследуется от ViewSet.

Однако способ заставить это работать - изменить наследуемый класс с ListAPIView на ModelViewSet следующим образом:

class ClientViewSet(viewsets.ModelViewSet):
    queryset = Client.objects.all()
    serializer_class = ClientSerializer
    filter_backends = [DjangoFilterBackend]
    filter_fields = ['phone']
0 голосов
/ 22 марта 2020

"Вы назвали его набором представлений, но это не делает его единым; вы наследуете от APIView, который является автономным обобщенным представлением c, а не набором представлений.

Набор представлений должен наследовать из viewsets.ViewSet. "

{ ссылка }

...