gpt4 book ai didi

python - 如何在 ViewSet @action 方法上指定可选参数?

转载 作者:行者123 更新时间:2023-12-01 01:02:02 25 4
gpt4 key购买 nike

我有一个 ViewSet 类,其方法如下:

@action(methods=["get"], detail=True, url_path="foo")
def foo(self, request: Request, pk: int) -> Response:
limit = request.query_params.get("limit")
if limit is not None:
limit = int(limit)

我愿意

  1. 声明该方法,以便生成的 OpenAPI 规范记录此可选参数,
  2. 理想情况下,我不必手动拉出变量并进行转换。

像这样的东西是理想的:

def foo(self, _: Request, pk: int, limit: Optional[int] = None) -> Response:

但它不起作用 - limit 始终是 None

<小时/>

上述第 1 点的解决方案是对方法进行更多修饰:

@swagger_auto_schema(
manual_parameters=[
openapi.Parameter(
"limit",
openapi.IN_QUERY,
required=False,
type=openapi.TYPE_INTEGER
)
]
)

最佳答案

为了能够完成您想要的操作,您需要在 Django 的 url 映射中捕获查询字符串参数,但 Django 只在那里搜索请求路径,并且不考虑查询字符串参数: docs (在 DRF 和 View 集发挥作用之前,这一直到 django 如何将 url 映射到 View )

我能想到的实现你想要的效果的唯一方法是提供 limit 作为路径参数,而不是查询字符串参数。然后,您可以从请求路径捕获限制并将其作为参数包含到 View 方法中,如下所示:

@action(methods=["get"], detail=True, url_path="foo(?:/(?P<limit>[0-9]+))?")
def foo(self, request: Request, pk: int, limit: Optional[int] = None) -> Response:
...

关于python - 如何在 ViewSet @action 方法上指定可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55716773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com