我正在尝试模仿前端 Photologue 应用程序的管理界面。为了实现这一点,我到目前为止在 View 中创建了一些代码:
def galleryuploader(request):
GalleryFormSet = modelformset_factory(GalleryUpload)
if request.method == 'POST':
formset = GalleryFormSet(request.POST, request.FILES)
if formset.is_valid():
formset.save()
# do something. ... do what?
else:
formset = GalleryFormSet()
return render_to_response("cms_helper/gallery_upload.html", {
"formset": formset,
})
和模板:
<form method="post" action="">
{{ formset }}
<input type="submit" />
</form>
我正在使用 django 的“form from models”方法来生成此前端表单。
问题:当我尝试上传文件(因为我正在将照片上传到照片库)并点击“提交”时,它会返回一个表单错误,告诉我缺少必填字段(文件)。
我认为我没有检查任何文件的请求,但即使我检查了,我也不太确定如何检查。这是关于 file uploads 的一些文档,但我还无法破译它。
如果您对如何使此上传表单发挥作用有任何建议,我将非常高兴听到它们。提前致谢!
最佳答案
将 enctype="multipart/form-data"
属性添加到表单标记中。此外,您还需要对上传的文件进行实际操作。这是 django docs 中的示例:
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
# Imaginary function to handle an uploaded file.
from somewhere import handle_uploaded_file
def upload_file(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
# you'll need to loop through the uploaded files here.
handle_uploaded_file(request.FILES['file'])
return HttpResponseRedirect('/success/url/')
else:
form = UploadFileForm()
return render_to_response('upload.html', {'form': form})
def handle_uploaded_file(f):
destination = open('some/file/name.txt', 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()
(看到一半的评论)
关于python - 通过文件上传从模型生成表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3723293/