【发布时间】:2020-08-03 19:17:30
【问题描述】:
我需要向 django rest 框架添加查询字符串,但到目前为止,我阅读的所有信息要么对我不起作用,要么对简单的事情没有意义。所以我想知道,做事的“官方”方式或最佳实践是什么?
我使用的端点是/account?user_id=1。我的 urls.py 设置如下:
router = routers.SimpleRouter(trailing_slash=False)
router.register(r'account', view.AccountViewSet)
urlpatterns = [
path('', include(router.urls)),
]
这些是我探索过的选项:
-
使用搜索过滤器:
在
AccountViewSet中,我设置了以下内容:from rest_framework.filters import SearchFilter . . . class AccountViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet): filter_backends = (SearchFilter, ) search_fields = ['user_id'] . . .有了这个我得到一个 405,
Method \"GET\" not allowed. -
将
router.register(r'', view.AccountViewSet, basename='account)添加到urls.py然后覆盖get_queryset或retrieve()这意味着我必须添加逻辑来处理两个用例,使用路径参数获取帐户并在查询字符串。 -
使用正则表达式模式添加自定义操作。有了这个,我仍然有
router.register(r'', view.AccountViewSet, basename='account)。然后在我的视图中我有:@action(detail=False, url_path='(?P<user_id>[^/.]+)') def get_user_id(self, request, user_id=None): . .这也可以,但我遇到的问题(这似乎不对)是当我点击我的端点
/account?user_id=1时,user_id 参数被设置为“帐户”而不是 1
那么处理这个问题的最佳实践是什么?
【问题讨论】:
-
你想完成什么?检索具有给定用户 ID 的所有帐户?或者只获取给定用户的一个唯一帐户。
-
是...检索具有给定用户 ID 的所有帐户
标签: django django-rest-framework