Как включить 400 ошибок проверки в drf-spectacular?

#python #django #django-rest-framework #drf-spectacular

Вопрос:

Я хочу просмотреть детали проверки в ответе, так как они могут быть повторно подтверждены сериализатором. Сериализатор может возвращать ошибки в зависимости от отсутствующего поля или недопустимого значения, и я хочу, чтобы в документации указывалось, какие ошибки могут появляться с кодом состояния 400. Что-то вроде этого

200: Успех

400: [ { «идентификатор организации»: [ «Это поле обязательно.» ] } ] #укажите любые ошибки проверки, которые могут быть вызваны сериализатором

Мой код в настоящее время выглядит так

 @extend_schema(  summary="Create a new transaction",  responses={  201: OpenApiResponse(  description='Success',  ),  400: OpenApiResponse(  description='Bad request. One or more errors occured.',  ),  },  )  

И в настоящее время эти результаты 200: Успех

400: Плохой запрос. Произошла одна или несколько ошибок.

Есть ли что-то вроде

 400: OpenApiResponse(description=customSerializerErrors,  ), #customSerializerErrors is something i hope gets errors from the serializer  

Комментарии:

1. вы хотите переопределить сообщение об ошибке, верно? пожалуйста, подтвердите

2. Я хочу показать сообщения об ошибках в документе. Я хочу, чтобы они появлялись рядом с кодом состояния. Это те же сообщения об ошибках, которые вернет сериализатор.

3. извините, не могли бы вы добавить пример

4. Я попытался добавить пример того, чего я хочу достичь, но я не знаю, существует ли это или может быть сделано @VishalPandey

5. 400: описание=customSerializerErrors вы можете добавить это, я не думаю, что мы сможем сделать то, что вы говорите для ответа, вы можете добавить в строку, подобную этой «OpenApiResponse(описание=customSerializerErrors)»,

Ответ №1:

drf-spectacular работает на основе сериализаторов.

OpenApiResponse это удобная оболочка, которая большую часть времени не нужна. На самом деле здесь, вероятно, происходит не то, что вы ожидаете. Вам нужно было бы дать OpenApiResponse(response=SomeSerializer) , иначе вы говорите, что тела ответа нет, потому что по умолчанию None == нет ответа.

Вы, вероятно, захотите это сделать:

 @extend_schema(  summary="Create a new transaction",  responses={  201: YourSerializer,  400: YourErrorSerializer,  },  )  

Там нет предопределенных YourErrorSerializer , потому что Django error_handler очень динамичен и не может быть проверен. На данный момент вам нужно было бы написать это YourErrorSerializer самостоятельно. Обратите внимание, что этот сериализатор на самом деле не используется, а просто показывает, как структурирован ответ.