django 如何将DRF ModelViewset连接到应用程序的根目录

pgvzfuti  于 2023-02-25  发布在  Go
关注(0)|答案(1)|浏览(127)

我有一个小的django应用程序,它有一个扩展了DRF的ModelViewSet的ViewSet,我试着把它附加到应用程序的根url,如下所示

urlpatterns = [
    path(r"", NotificationViewSet.as_view(), name="company"),
]

但这会导致错误:
类型错误:在ViewSet上调用.as_view()时必须提供actions参数。例如.as_view({'get': 'list'})
这个错误足以说明如何Mapget方法,github copilot建议:

urlpatterns = [
    path(
        r"",
        NotificationViewSet.as_view(
            {
                "get": "list",
                "post": "create",
                "patch": "partial_update",
                "delete": "destroy",
            }
        ),
        name="company",
    ),
]

但我不确定这是正确的。而且这似乎不处理需要URL参数的检索。我很惊讶我必须如此明确。当然有一个更简单的方法。

8ehkhllq

8ehkhllq1#

包含ViewSet的所有路由的常见方法是使用路由器,例如:

...
from django.urls import include, path
from rest_framework import routers
...

router = routers.DefaultRouter()
router.register('', NotificationViewSet)

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

此外,您还可以使用.as_view()

urlpatterns = [
    path(
        '',
        NotificationViewSet.as_view(
            {
                "get": "list",
                "post": "create"
            }
        ),
        name="company",
    ),
    path(
        '<int:pk>/',
        NotificationViewSet.as_view(
            {
                "patch": "partial_update",
                "delete": "destroy"
            }
        ),
        name="company-detail",
    ),
]

注意,我们需要为URL中需要pk的方法提供一个专用路径,router.register()会自动管理它。

相关问题