没有 PK 的 Django REST Framework 嵌套路由
Posted
技术标签:
【中文标题】没有 PK 的 Django REST Framework 嵌套路由【英文标题】:Django REST Framework nested routes without PK 【发布时间】:2017-04-19 15:07:17 【问题描述】:我想实现这样的路由:
/items - list of all items.
/items/types - list of all item types
我正在查看 drf-nester-routs,但嵌套 url 期望 pk 被传递。有什么好方法可以实现我想要的吗?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于没有 PK 的 Django REST Framework 嵌套路由的主要内容,如果未能解决你的问题,请参考以下文章
Django Rest-Framework 嵌套序列化器顺序
在 Django Rest 框架 URL 中通过唯一 ID 但不是 PK 获取详细信息
Django Rest Frame API:ModelSerializer 中的附加字段
我需要显示与相同模型有多对多关系的相关字段。 Django Rest Frame工作
如何修复 Reactjs、Django、Django Rest Frame 工作项目中的“net::ERR_CONNECTION_REFUSED 和错误:网络错误”错误