使用DjangoRestFramework实现嵌套路由
时间: 2024-06-12 12:03:58 浏览: 49
react-router-dom 嵌套路由的实现
5星 · 资源好评率100%
在DjangoRestFramework中实现嵌套路由,需要使用`DefaultRouter`和`NestedDefaultRouter`。
`DefaultRouter`用于创建根路由,`NestedDefaultRouter`用于创建子路由。
例如,我们有一个`Book`模型和一个`Chapter`模型,一个`Book`可以包含多个`Chapter`,我们需要实现嵌套路由来获取某个`Book`下的所有`Chapter`。
首先,在`urls.py`中导入`DefaultRouter`和`NestedDefaultRouter`:
```python
from rest_framework.routers import DefaultRouter, NestedDefaultRouter
```
然后,创建根路由和子路由:
```python
router = DefaultRouter()
router.register('books', BookViewSet)
books_router = NestedDefaultRouter(router, 'books', lookup='book')
books_router.register('chapters', ChapterViewSet, basename='book-chapters')
```
这里,我们先创建了一个根路由`router`,并注册了一个`BookViewSet`。然后,使用`NestedDefaultRouter`创建了一个子路由`books_router`,将其与`BookViewSet`关联,并指定了`lookup`为`book`,表示`Chapter`模型中与`Book`模型关联的字段为`book`。
最后,我们使用`books_router`注册了一个`ChapterViewSet`,并指定了`basename`为`book-chapters`。
这样,我们就成功创建了一个嵌套路由,可以通过访问`/books/{book_id}/chapters/`来获取某个`Book`下的所有`Chapter`。
阅读全文