gpt4 book ai didi

javascript - Django 中任意数量的文件上传

转载 作者:行者123 更新时间:2023-11-29 20:18:32 25 4
gpt4 key购买 nike

允许用户使用 Django 进行任意数量的文件上传的最佳方法是什么?

如果我知道我将允许用户最多上传两个文件,那么我可以在我的 forms.py 中这样做...

from django import forms

class UploaderForm(forms.Form):
file1 = forms.FileField(upload_to='user_files')
file2 = forms.FileField(upload_to='user_files')

...这在我的 views.py 中...

...
if request.method == 'POST':
form = UploaderForm(request.POST)
if form.is_valid():
form.save()
# do something.
else:
form = UploaderForm()
...

但是,我计划在前端使用 Javascript 以允许用户不断添加新的 <input type="file" name="fileN" />元素(其中 N 是添加到页面的第 N 个文件上传字段。)用户可以选择在上传时选择一个或多个文件。

有什么方法可以使用 Django 的内置表单来完成此任务吗?

如果我怀疑我不能使用 Django 表单来生成表单,我可以使用 Django 的验证吗?即,能够访问 form.cleaned_data['file0'] 会很方便, form.cleaned_data['file1']等,而不必自己进行验证。

谢谢。

最佳答案

Formsets 正是您所需要的。
http://docs.djangoproject.com/en/dev/topics/forms/formsets/#formsets

您所要做的就是遵循表单集在您的 javascript 中使用 'form-0-field' 而不是 fileN

的字段命名格式

同时相应地修改 form-TOTAL_FORMS。检查文档,他们在这方面特别详尽。

class UploaderForm(forms.Form):
file1 = forms.FileField(upload_to='user_files')


from django.forms.formsets import formset_factory
UploaderFormset = formset_factory(UploaderForm)

# long as you specify 'form-TOTAL_FORMS' and 2 other fields listed in the docs,
# the formset will auto generate form instances & populate with fields based on
# their 0 index.
formset = UploaderFormset(request.POST)

for form in formset.forms:
form.save()

最好的部分是这与验证完美结合,您甚至可以重新显示错误消息的表单(如果您仅通过 ajax 生成 html,这会有点痛苦)

关于javascript - Django 中任意数量的文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com