Django Rest Framework не может зарегистрировать маршрут - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть следующий код:

# urls.py
from django.contrib import admin
from django.urls import include, path
from rest_framework import routers
from api import views

router = routers.DefaultRouter()
router.register(r'mymodel', views.MyModelViewSet, 'mymodel')

urlpatterns = [
    # ...
    path('api/', include(router.urls)),
]

И следующий ViewSet:

class MyModelViewSet(viewsets.ViewSet):
    permission_classes = (OnlyStaffCanPost,)
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

Когда я пытаюсь получить доступ к http://localhost:8000/api/mymodel/, он выдает ошибку Not Found.Я распечатал router.urls, вывод:

[<URLPattern '^$' [name='api-root']>, <URLPattern '^\.(?P<format>[a-z0-9]+)/?$' [name='api-root']>]

Почему мой просмотр не регистрируется?

1 Ответ

0 голосов
/ 23 сентября 2018

Этот ViewSet не предоставляет никаких действий по умолчанию. Если вы хотите использовать CRUD для этой модели, вы должны использовать вместо него ModelViewSet следующим образом:

from rest_framework import viewsets

class MyModelViewSet(viewsets.ModelViewSet):
    permission_classes = (OnlyStaffCanPost,)
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

viewsets.ViewSet -> viewsets.ModelViewSet

Или, если вам нужно только одно действие, вы можете использовать следующие миксины:

from rest_framework import mixins
from rest_framework import viewsets

class MyModelViewSet(mixins.ListModelMixin,
                     viewsets.GenericViewSet):

    permission_classes = (OnlyStaffCanPost,)
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer
...