这已经困扰我一段时间了。
我的最终目标是在 SwaggerUI 中显示查询参数选项,并为每个查询参数提供一个表单输入。类似于为 POST 提供序列化程序时的显示方式。
我正在使用继承自 GenericViewSet 的视图集,我尝试了以下操作:
- 提供
filter_fields
属性 - 提供并设置
filter_backends
属性到(filters.DjangoFilterBackend,)
- 提供在我的模块中定义的 filter_class。
- 覆盖
options
方法提供[actions][GET]
信息
这里有一个小问题,我没有使用任何模型,所以我认为 DjangoFilterBackend 不会真正帮助我。我正在使用 DjangoRESTFramework 与外部 API 对话,我只是简单地获取 JSON 结果,并将其传递到前端层。
这是我的代码的一个小修改片段,以更好地解释我的问题:
视图.py
class SomeViewSet(GenericViewSet):
# Note that I have all of these defined, but I have tried various combinations
filter_fields = ('query_option_1', 'query_option_2',)
filter_backeds = (filters.DjangoFilterBackend,)
filter_class = SomeFilter
query_metadata = some_dict
# This works when request is OPTIONS
def options(self, request, *args, **kwargs):
if self.metadata_class is None:
return self.http_method_not_allowed(request, *args, **kwargs)
data = self.metadata_class().determine_metadata(request, self)
data['actions']['GET'] = self.query_metadata
return Response(data, status=status.HTTP_200_OK)
过滤器.py
class SomeFilter(FilterSet):
strict = True
query_option_1 = django_filters.NumberFilter(name='query_option_1')
query_option_2 = django_filters.NumberFilter(name='query_option_2')
class Meta:
fields = ['query_option_1', 'query_option_2']
感谢您的关注,并提前感谢您的回复。
原文由 dajee 发布,翻译遵循 CC BY-SA 4.0 许可协议
好的,对于那些偶然发现这个问题的人,我已经弄清楚了。这很愚蠢,我因为不知道而感到有点愚蠢,但在我的辩护中,它没有被清楚地记录下来。在 DRF 文档或 Django REST Swagger 存储库中找不到该信息。相反,它是在 django-rest-framework-docs 下找到的,这是 Django REST Swagger 的基础。
要将您的查询参数指定为在您的 SwaggerUI 中显示为表单字段,您只需像这样评论:
swagger 将解析您的评论并为 param1 和 param2 放置一个表单输入。以下
--
是对参数的说明。