【发布时间】:2015-03-27 23:47:45
【问题描述】:
这已经困扰了我一段时间了。
我的最终目标是在 SwaggerUI 中显示查询参数选项,并为每个查询参数提供一个表单输入。类似于为 POST 提供序列化程序时的显示方式。
我正在使用从 GenericViewSet 继承的视图集,我尝试了以下方法:
- 提供
filter_fields属性 - 提供并将
filter_backends属性设置为(filters.DjangoFilterBackend,) - 提供在我的模块中定义的 filter_class。
- 覆盖
options方法以提供[actions][GET]信息
这里有个小问题,我没有使用任何模型,所以我认为 DjangoFilterBackend 不会真正帮助我。我正在使用 DjangoRESTFramework 与外部 API 对话,我只是将 JSON 结果返回,并将其传递给前端层。
这里是我的代码的一个小修改 sn-p 以更好地解释我的问题:
views.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)
filters.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']
感谢您的关注,并提前感谢您的回复。
【问题讨论】:
标签: python django rest django-rest-framework