使用DjangoRestFramework实现嵌套路由
时间: 2024-06-12 13:03:58 浏览: 9
在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`。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)