没有PK

问题描述:

Django的REST框架嵌套的路线我想实现这样的路线:没有PK

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

我看着DRF-巢-击溃,但嵌套网址期待{} PK要传递。有没有什么好的方法来实现我想要的?

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

您可能需要看一看这太问题关于REST嵌套资源:

What are best practices for REST nested resources

+0

现在它以这种方式实现。但是我认为让项目的类型子地址更合乎逻辑,因为它们是项目的类型而没有别的。 – mcferden

+1

如果它们是项目的类型(项目的子资源),那意味着您需要添加'pk'。如果我明白你所需要的是'/ types'而不是'/ items//types' – ettanany

随着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