DRF - 从URL过滤而不是查询参数

时间:2017-06-10 16:45:24

标签: django-rest-framework

让我说我有以下观点:

class UserViewSet(viewsets.ReadOnlyModelViewSet, viewsets.GenericViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

router.register(r'users', UserViewSet)

我可以通过点击我的API的/ users / endpoint来获取所有用户。

我还希望能够使用/ companies / {company_id} / users

列出公司用户

我想创建一个新端点,它将重用我的list方法,但以不同方式过滤查询集。 我的想法是注册这条路线来调用另一种方法,比方说list_by_company,它的kwargs中会有company_id

如何在DRF路由器类中注册?

我也欢迎其他有关如何实现此过滤的想法,但我不想使用查询参数,因为从长远来看它会有点混乱。

1 个答案:

答案 0 :(得分:0)

我发现我可以扩展DefaultRouter并添加一个完全符合我想要的条目:

B

然而,由于我也在重写默认路由,所以这有点冗长。

然后,我可以直接将路由器添加到DRF路由器,这更短:

C

我将使用此解决方案,但我很想知道其他开发人员是否以不同的方式解决此类案例:)