Использование 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):
...