路由器上的 Django 嵌套视图集

德米特里·卢涅夫

urls.py某些应用程序的文件中,我有以下代码:

from rest_framework import routers

from .viewsets import (JournalViewSet, StatisticViewSet, FuelLogViewSet,
                       MoveLogViewSet, RestLogViewSet, WinLogViewSet,
                       GreatfulLogViewSet)


router = routers.DefaultRouter()
router.register(r'journal', JournalViewSet)
router.register(r'journal/statistic', StatisticViewSet)
router.register(r'journal/fuel', FuelLogViewSet)
router.register(r'journal/move', MoveLogViewSet)
router.register(r'journal/rest', RestLogViewSet)
router.register(r'journal/win', WinLogViewSet)
router.register(r'journal/greatful', GreatfulLogViewSet)

urlpatterns = router.urls

上面所有的 vievsets 都不是特定的,只使用 serializer_class 和 queryset。Swagger 生成正确的方案,但 DRF 说,我没有允许的 POST 方法(在我实际上有的 viesets 中),当我尝试打开类似的 url 时127.0.0.1:8000/journal/win,drf 返回日志的方案。当寄存器没有嵌套时router.register(r'move', MoveLogViewSet),我得到了所有正确的。我知道,DRF 可能不像我那样提供嵌套路由。我应该怎么办?

加里为什么

我强烈建议您阅读DRF中的DefaultRouter

这是因为第二条路径lookupDefaultRouter.

journal/fuel/=>{prefix}/{lookup}/[.format]

对于您的问题:

from rest_framework import routers

from .viewsets import (JournalViewSet, StatisticViewSet, FuelLogViewSet,
                       MoveLogViewSet, RestLogViewSet, WinLogViewSet,
                       GreatfulLogViewSet)


router = routers.DefaultRouter()
# assessment_router = routers.DefaultRouter()
router.register(r'index', JournalViewSet) # Index 
router.register(r'statistic', StatisticViewSet)
router.register(r'fuel', FuelLogViewSet)
router.register(r'move', MoveLogViewSet)
router.register(r'rest', RestLogViewSet)
router.register(r'win', WinLogViewSet)
router.register(r'greatful', GreatfulLogViewSet)

# assessment_router.register(r'dashboard', SnippetViewSet)

urlpatterns = [
    path('journal/', include(router.urls)),
    # path('assessment/', include(assessment_router.urls)),
    # path('admin/', admin.site.urls),
    ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章