Определите POST в остальной части coreapi/django

Есть ли способ определить объект для функции post в схеме django rest framework?

У меня есть вид отдыха API:

class DocumentView(viewsets.ModelViewSet):
    ...
    queryset = Document.objects.all().order_by('pk')
    serializer_class = serializers.DocumentSerializer
    pagination_class = LargeResultPagination
    permission_classes = (IsAuthenticated,)
    authentication_class = (
        Token,
    )

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)  

Данные, которые должны быть размещены, имеют формат:

{
     "items": ["a", "b", "c"],
     "name": "test" 
}

Как я могу описать это в схеме с помощью coreapi?

manual_fields=[
        coreapi.Field(
            "data",
            required=True,
            location="body",
            description='{"items":[], "name":str}',
            schema=coreschema.Object()
        ),
    ])

По крайней мере, так будет в описании. Это, конечно, не очень удобно, особенно если вам нужно больше полей в JSON, который будет опубликован, так как описание в одной строке только в swagger.

Наиболее идеальной была бы ситуация, если бы я мог получить поля 'items' и 'name' в виде отдельных полей на странице сваггера.

Я гуглил, но не могу найти ответ на этот вопрос. Все примеры, которые я видел, предназначены для получения параметров. Так что же лучше здесь делать?

1 ответ

Должно работать, если вы оберните его в AutoSchema

schema = AutoSchema(manual_fields=[
    coreapi.Field(
        "data",
        required=True,
        location="body",
        description='{"items":[], "name":str}',
        schema=coreschema.Object()
    ),
])

От этого вопроса прошло много времени, но если кому-то нужно, это ваше решение, вам нужно установить местоположение в 'form', чтобы ваша схема была такой:

manual_fields=[
    coreapi.Field(
        "data",
        required=True,
        location="form",
        description='{"items":[], "name":str}',
        schema=coreschema.Object()
    ),
])

Для получения дополнительных инструкций вы можете увидеть схемы - Django Rest Framework

Здесь я извлекаю нужный вам раздел:

РАСПОЛОЖЕНИЕ

Определяет, как информация кодируется в запросе. Должна быть одна из следующих строк:

"путь"

Включен в шаблонный URI. Например, значение URL-адреса / products / {product_code} / можно использовать вместе с полем "путь" для обработки входных данных API в пути URL-адреса, например / products / slim-fit-jeans /.

Эти поля обычно соответствуют именованным аргументам в URL-адресе проекта conf.

"запрос"

Включен как параметр запроса URL. Например? Search=sale. Обычно для запросов GET.

Эти поля обычно соответствуют элементам управления разбиением на страницы и фильтрацией в представлении.

"форма"

Включено в тело запроса как отдельный элемент объекта JSON или HTML-формы. Например {"цвет": "синий", ...}. Обычно для запросов POST, PUT и PATCH. В одну ссылку можно включить несколько полей "формы".

Эти поля обычно соответствуют полям сериализатора в представлении.

"тело"

Включено как полное тело запроса. Обычно для запросов POST, PUT и PATCH. В ссылке может существовать не более одного поля "body". Не могут использоваться вместе с полями "формы".

Эти поля обычно соответствуют представлениям, которые используют ListSerializer для проверки ввода запроса, или представлениям загрузки файлов.

Другие вопросы по тегам