Я пытаюсь отобразить функциональное представление на странице пользовательского интерфейса Swagger.Представление является частью устаревшего кода (реального, а не того, что показан ниже) и поддерживает операции GET
и POST
.
@schema(foo_schema)
def foo(request):
if request.method == 'GET':
param1 = request.query_params.get('param1')
# do something
elif request.method == 'POST':
param1 = request.data.get('param1')
# do something
...
Параметр param1
необходим как для операций GET
, так и POST
, поэтому я сначала попытался указать его дважды в схеме с разными аргументами для местоположения:
foo_schema = AutoSchema(
manual_fields=[
coreapi.Field(
name='param1',
location='query',
required=True,
schema=coreschema.Integer(),
),
coreapi.Field(
name='param1',
location='formData',
required=True,
schema=coreschema.Integer(),
),
...
]
)
Проблема в том, что пользовательский интерфейс swagger отображает поле только один раз, как данные формы.Таким образом, даже если бы я попытался получить доступ к конечной точке через swagger с запросом GET
, параметр был бы включен в переменную request.data
, а не в request.query_params
, как если бы введенные данные всегда были частью запроса POST
,Точно так же, если бы я удалил в схеме спецификацию второго поля, параметр всегда был бы в request.query_parames
, как если бы запросы всегда были GET
.
Как мне указать оба поля в сваггере?Или лучше, как мне показать только одно поле, но убедиться, что параметры GET
переходят в request.query_params
, а параметры POST
переходят в request.data
?