1

我试图强制dry-yasg正确解析路径中的参数。假设我们有

path('users/<int:user_id>/', whatever.as_view(...))

在 swagger 文档中,它不被视为intstring而是

在此处输入图像描述

我用过

swagger_auto_schema(manual_parameters = [
openapi.Parameter(
        name,
        openapi.IN_PATH,
        description=desc,
        type=openapi.TYPE_INTEGER,
        required=True
    )
]

但这很烦人。我找不到负责解析它的函数/方法/类。是否有一种简单的方法可以根据路径更改此解析器的行为,以便如果int发生openapi.TYPE_INTEGER则将返回而不是返回string

4

1 回答 1

2

在某些情况下会自动确定参数类型,如果检测失败则回退到字符串。

queryset = get_queryset_from_view(view_cls)

for variable in sorted(uritemplate.variables(path)):
    model, model_field = get_queryset_field(queryset, variable)
    attrs = get_basic_type_info(model_field) or {'type': openapi.TYPE_STRING}

如您所见,它尝试根据视图查询集的列类型获取类型。但是,如果您的参数名称与查询集中的任何内容都不匹配,则会得到一个字符串。所以你的第一选择应该是尝试使用它可以自动检测的名称。

但是,如果这不起作用,您将需要 subclassEndpointEnumerator和 override get_path_parameters(),这可能最容易调用super().get_path_parameters()并遍历每个参数并根据变量名称替换类型。

要使用这个类,您需要自己的OpenAPISchemaGenerator.

  • 使用自定义 OpenAPISchemaGenerator
  • 用您自己的 EndpointEnumerator 覆盖其 endpoint_enumerator_class
于 2020-05-07T17:31:41.587 回答