代码之家  ›  专栏  ›  技术社区  ›  yierstem

Django Rest框架无法注册路由

  •  0
  • yierstem  · 技术社区  · 7 年前

    我有以下代码:

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

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

    当我试图进入 http://localhost:8000/api/mymodel/ 它给了我找不到的错误。我打印出来了 router.urls ,输出为:

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Andrei Berenda    7 年前

    默认情况下,此视图集不提供任何操作 如果要对此模型使用CRUD,应使用ModelViewSet,而不是如下所示:

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

    或者,如果您只需要一个操作,可以使用如下混合:

    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