【问题标题】:Django REST Framework nested routes without PK没有 PK 的 Django REST Framework 嵌套路由
【发布时间】:2017-04-19 15:07:17
【问题描述】:

我想实现这样的路由:

/items - list of all items.
/items/types - list of all item types

我正在查看 drf-nester-routs,但嵌套 url 期望 {pk} 被传递。有什么好方法可以实现我想要的吗?

【问题讨论】:

    标签: python django routes django-rest-framework nested-routes


    【解决方案1】:

    如果你不需要pk,那么你的路由应该是/types 而不是/items/types

    您可能需要看看这个关于 REST 嵌套资源的 SO 问题:

    What are best practices for REST nested resources

    【讨论】:

    • 现在就是这样实现的。但我认为将类型设置为项目的子 url 更合乎逻辑,因为它们是项目的类型,没有别的。
    • 如果它们是项目类型(项目的子资源),则意味着您需要添加pk。如果我理解你需要的是/types 而不是/items/<pk>/types
    【解决方案2】:

    ID为/items/1/types的意思是“显示属于ID为1的项目的所有类型”。而/items/types 并没有真正的意义,因为资源类型不能属于所有项目资源。

    但是,您可以使用 @list_route 装饰器将其实现为 ViewSet 的自定义操作,例如

    class MyViewSet(viewsets.ModelViewSet):
        ...
        @list_route()
        def types(self, request):
            return Response(some_way_to_list_types())
        ...
    

    不过,这可能不是一种 RESTful 方式。

    Docs on custom ViewSet actions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2014-08-14
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多