Использование extend_schema_field для настраиваемого поля

Я создал настраиваемое поле с именем, которое создает миниатюры с загруженными изображениями, и использовал его в своем Userмодель Модель

пользователя:

      class User(AbstractBaseUser):
    profile_image = PictureField(make_thumbnail=True)

Мой PictureField, получает файл изображения, например django's ImageField и возвращает такой словарь:

      {
    "image": {
      "url": "string",
      "name": "string"
    },
    "thumbnail": {
      "url": "string",
      "name": "string"
    } | None
}

Все в порядке, и мое настраиваемое поле работает правильно. моя проблема в схеме, созданной с помощью drf_spectacular. Я не знаю, как установить этот вывод на мой PictureSerializerField. уже установил @extend_schema_field декоратор для моего поля BINARY (для возможности загрузить файл с помощью Swagger), и при этом мой выход Response установлен в "string":

      @extend_schema_field(OpenApiTypes.BINARY)
class PictureSerializerField(ImageField):
     ...

Теперь мои документы Swagger выглядят так: я ищу что-то вроде ниже, чтобы показать свой вывод в Response, а также я могу загрузить файл в Request:

      @extend_schema_field({
    'request':OpenApiTypes.BINARY,
    'response': {}# My output example that I said above
})

моя идея создать пустой класс сериализатора и установить @extend_schema_serializer на это, но я думаю, что это не очень хороший способ и не работает.

1 ответ

Решение

Хорошо, я исправил. просто прочитайте небольшую документацию OpenAPI, а также я увидел @extend_schema_field поддерживает dict параметр, поэтому я пишу свой код следующим образом:

      @extend_schema_field({'type':"string",'format':'binary',
    'example':{
             "image":{"url":"string","name":"string"},
             "thumbnail":{"url":"string","name":"string"}
    }
})
class PictureSerializerField(ImageField):
    ...

И выглядит нормально.

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