我试图为基于类的视图指定处理文件上传的特定方法。根据docs https://docs.djangoproject.com/en/1.11/topics/http/file-uploads/#s-id1这可以通过以下方式实现:
from django.core.files.uploadhandler import TemporaryFileUploadHandler
request.upload_handlers = [TemporaryFileUploadHandler(request=request)]
如果我在中指定这一点post
的方法FormView
像这样:
def post(self, request, *args, **kwargs):
request.upload_handlers = [TemporaryFileUploadHandler(request=request)]
return super().post(self, request, *args, **kwargs)
I get:
AttributeError: You cannot set the upload handlers after the upload has been processed.
类似的变体产生相同的结果:
def post(self, request, *args, **kwargs):
self.request.upload_handlers = [TemporaryFileUploadHandler(request=self.request)]
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
但是当我在get
这个方法无效:
def get(self, request, *args, **kwargs):
request.upload_handlers = [TemporaryFileUploadHandler(request=self.request)]
return super().get(self, request, *args, **kwargs)
如果我上传一个小文件,它仍然使用默认值django.core.files.uploadhandler.MemoryFileUploadHandler
.
我究竟做错了什么?
EDIT
另外,当我尝试反映中的建议时note https://docs.djangoproject.com/en/1.11/topics/http/file-uploads/#id1,我也得到同样的结果AttributeError
:
from django.views.decorators.csrf import csrf_exempt, csrf_protect
@csrf_exempt
def post(self, request, *args, **kwargs):
request.upload_handlers = [TemporaryFileUploadHandler(request=request)]
return self._post(request, *args, **kwargs)
@csrf_protect
def _post(self, request, *args, **kwargs):
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)