我已根据本指南创建了一个上传文件的表单:
Need a minimal Django file upload example
我想调整它以允许多个文件上传。我尝试了几种没有太多运气的方法。任何建议表示赞赏。
上传表单
<form action="{% url 'list' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p>{{ form.non_field_errors }}</p>
<p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p>
<p>
{{ form.docfile.errors }}
{{ form.docfile }}
</p>
<p><input type="submit" value="Upload" /></p>
</form>
views.py
def list(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile=request.FILES['docfile'])
newdoc.save()
return HttpResponseRedirect(reverse('list'))
else:
form = DocumentForm() # A empty, unbound form
documents = Document.objects.all()
return render(
request,
'check/list.html',
{'documents': documents, 'form': form}
)
forms.py
class DocumentForm(forms.Form):
docfile = forms.FileField(
label='Select a file',
help_text='max. 42 megabytes',
)
答案 0 :(得分:1)
您可以添加多个&#39;属性为表单中的文件输入。您可以控制或转移选择所需的文件。
<input type="file" name="files" multiple />
然后在您的视图中,您可以使用:
if request.method == 'POST':
for file in request.FILES.getlist('files'):
# do something with each file
答案 1 :(得分:0)
我假设您希望在一个页面上显示多个上传小部件。如果没有其他附加组件,用户将无法同时选择多个图像并上传所有图像。如果您希望用户能够在同一页面上传5张图片,则您必须拥有5张图片上传字段或小部件。目前,您的表单只有一个。
这可以使用formset来完成。从本质上讲,formset是允许您在同一页面上显示同一表单的多个实例的东西。
阅读formsets,如果您对此有任何疑问,请告诉我们。我已经使用基本的formset功能准确地实现了您在我的网站上想要做的事情,而且效果很好。
答案 2 :(得分:0)
您可以执行类似
的操作forms.py
from django import forms
class FileFieldForm(forms.Form):
file_field = forms.FileField(
widget=forms.ClearableFileInput(attrs={'multiple': True}))
views.py
from django.views.generic.edit import FormView
from .forms import FileFieldForm
class FileFieldView(FormView):
form_class = FileFieldForm
template_name = 'upload.html' # Replace with your template.
success_url = '...' # Replace with your URL or reverse().
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
files = request.FILES.getlist('file_field')
if form.is_valid():
for f in files:
... # Do something with each file.
return self.form_valid(form)
else:
return self.form_invalid(form)
参考:https://docs.djangoproject.com/en/2.0/topics/http/file-uploads/#uploading-multiple-files