Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将多个文件从Django表单保存到模型_Python_Django_Django Models_Django Forms_Django Views - Fatal编程技术网

Python 将多个文件从Django表单保存到模型

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

希望使用HTML5将2个文件上传到Django表单中(因为它支持多文件上传)。我面临的问题是它的目标是第一个上传。它知道有两个文件,因为当它保存时,它会保存两次(按照下面的for循环)。我本想使用字典来循环名称,但我收到一个错误,它说
这个关键字不能是表达式。也许这很简单,但如果你需要更多,我可以提供。请注意,我没有使用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)