Использование FileField с пользовательским интерфейсом Swagger и drf-впечатляющим
У меня есть проект Django REST Framework, в котором используется
ModelViewSet
для создания API-интерфейсов для модели, содержащей.
Я поделился полным примером проекта Django, демонстрирующим эту проблему здесь . Но резюмируем ключевые компоненты:
models.py
from django.db import models
class Profile(models.Model):
image = models.FileField(upload_to='uploads/%Y/%m/%d/')
views.py
from rest_framework import (
viewsets,
serializers,
parsers,
)
from sample import models
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = models.Profile
fields = ['id', 'image']
read_only_fields = ['id']
class ProfileViewSet(viewsets.ModelViewSet):
serializer_class = ProfileSerializer
queryset = models.Profile.objects.all()
urls.py
from drf_spectacular.views import (
SpectacularAPIView,
SpectacularSwaggerView,
)
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
from rest_framework.routers import DefaultRouter
from sample import views
router = DefaultRouter()
router.register('profile', views.ProfileViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
path('api/schema/', SpectacularAPIView.as_view(), name='api-schema'),
path(
'api/docs/',
SpectacularSwaggerView.as_view(url_name='api-schema'),
name='api-docs',
),
path('', include(router.urls)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings.py (
REST_FRAMEWORK
только конфигурация):
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}
requirements.txt
Django==3.2.3
djangorestframework==3.12.4
drf-spectacular==0.16.0
Я создаю доступные для просмотра документы Swagger-UI, используя drf-spectular для документирования API.
Проблема в том, что
FileField
ввод в Swagger-UI - это
string
input и не дает возможности установить файл:
Я хотел бы иметь ввод файла, где я могу выбрать файл, который будет отправлен в API.
У меня вопрос: как я могу настроить DRF или drf-Spectrum для отображения этого поля?
1 ответ
После некоторого покопания в drf-впечатляющей документации и проблемах GitHub я обнаружил, что для FileField можно установить значение
binary
добавив в
REST_FRAMEWORK
в settings.py :
REST_FRAMEWORK = {
'COMPONENT_SPLIT_REQUEST': True
}