Python 将多个文件从Django表单保存到模型
希望使用HTML5将2个文件上传到Django表单中(因为它支持多文件上传)。我面临的问题是它的目标是第一个上传。它知道有两个文件,因为当它保存时,它会保存两次(按照下面的for循环)。我本想使用字典来循环名称,但我收到一个错误,它说Python 将多个文件从Django表单保存到模型,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,希望使用HTML5将2个文件上传到Django表单中(因为它支持多文件上传)。我面临的问题是它的目标是第一个上传。它知道有两个文件,因为当它保存时,它会保存两次(按照下面的for循环)。我本想使用字典来循环名称,但我收到一个错误,它说这个关键字不能是表达式。也许这很简单,但如果你需要更多,我可以提供。请注意,我没有使用forms.py上传文件,而是使用常规的HTML,这是一种适合我的方法。我在request.FILES中循环每次出现的InMemoryUploadedFile,并将其重新分配回re
这个关键字不能是表达式。也许这很简单,但如果你需要更多,我可以提供。请注意,我没有使用forms.py上传文件,而是使用常规的HTML,这是一种适合我的方法。我在request.FILES中循环每次出现的InMemoryUploadedFile,并将其重新分配回request.FILES,然后逐个保存
forms.py
class PhotosForm(forms.ModelForm):
file = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
class Meta:
model = Photos
fields = ['file']
def photos(request):
photos = Photos.objects.all()
if request.method == 'GET':
form = PhotosForm(None)
elif request.method == 'POST':
for _file in request.FILES.getlist('file'):
request.FILES['file'] = _file
form = PhotosForm(request.POST, request.FILES)
if form.is_valid():
_new = form.save(commit=False)
_new.save()
form.save_m2m()
context = {'form': form, 'photos': photos}
return render(request, 'app/photos.html', context)
视图.py
class PhotosForm(forms.ModelForm):
file = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
class Meta:
model = Photos
fields = ['file']
def photos(request):
photos = Photos.objects.all()
if request.method == 'GET':
form = PhotosForm(None)
elif request.method == 'POST':
for _file in request.FILES.getlist('file'):
request.FILES['file'] = _file
form = PhotosForm(request.POST, request.FILES)
if form.is_valid():
_new = form.save(commit=False)
_new.save()
form.save_m2m()
context = {'form': form, 'photos': photos}
return render(request, 'app/photos.html', context)