#django #django-rest-framework
#django #django-rest-framework
Вопрос:
У меня есть представление DRF, в котором мне нужно убедиться, что загруженные файлы попадают в файловую систему, а не только в память. DRF уважает настройки Django FILE_UPLOAD_HANDLERS
, но я не хочу менять их для всего моего приложения, только для этого одного представления.
Я знаю, что в обычном представлении Django я мог бы установить request.upload_handlers
желаемое значение, но, похоже, это не работает в DRF. Я пытался сделать это из .initialize_request()
своего набора представлений, например:
def initialize_request(self, request, *args, **kwargs):
request.upload_handlers = ["django.core.files.uploadhandler.TemporaryFileUploadHandler"]
return super().initialize_request(request, *args, **kwargs)
но я получаю:
AttributeError: You cannot set the upload handlers after the upload has been processed.
Каков правильный способ для меня установить обработчики загрузки для одного представления DRF (в частности, create
действие общего набора представлений)?
Ответ №1:
Похоже, вы неправильно назначаете обработчик загрузки
from django.core.files.uploadhandler import TemporaryFileUploadHandler
from rest_framework import viewsets
class MyUploadViewSet(viewsets.ModelViewSet):
# your view class attributes goes here....
def initialize_request(self, request, *args, **kwargs):
request.upload_handlers = [TemporaryFileUploadHandler(request)] # initialization goes here
return super().initialize_request(request, *args, **kwargs)
Примечание
Это будет работать как есть во всех представлениях на основе классов DRF