форма Django с несколькими полями файла - PullRequest
14 голосов
/ 21 апреля 2011

Как вы обрабатываете несколько файловых полей в Django. Например, если бы у меня было только одно поле формы, я бы передал request.FILES ['file'] функции обработки. Но что делать, когда есть больше файлов?

Ответы [ 3 ]

31 голосов
/ 09 сентября 2011

Я опаздываю на вечеринку, но некоторое время пытался это выяснить и наконец нашел решение. Посмотрите на код, используемый здесь: https://code.djangoproject.com/ticket/12446

Вы можете получить доступ к многочастным значениям с помощью getlist. Если бы моя HTML-форма была:

<form enctype="multipart/form-data" action="" method="post">
<input type="file" name="myfiles" multiple>
<input type="submit" name="upload" value="Upload">
</form>

Мой код Django для обработки будет выглядеть так:

for afile in request.FILES.getlist('myfiles'):
    # do something with afile

Написание поля формы / виджета для правильной обработки это мой следующий шаг. Я все еще довольно плохо знаком с использованием Django, поэтому я учусь по ходу дела.

9 голосов
/ 21 апреля 2011

request.FILES.get('filename', None) реагирует на существование поля с именем формы следующим образом:

<input type="file" name="filename"></input>

Если у вас было два таких поля:

<input type="file" name="file1"></input>
<input type="file" name="file2"></input>

Тогда request.FILES.get('file1', None) и request.FILES.get('file2', None) должен выдать вам эти файлы соответственно.

Причиной этого является составная часть MIME.Три части (данные формы, файл1, файл2) должны быть загружены, и UploadFileHandler Django разделяет это на request.POST и request.FILES соответственно.

0 голосов
/ 11 ноября 2015

Вот хорошая ссылка для этого ответа: https://github.com/Chive/django-multiupload. Однако, поскольку я не использовал ModelForm, мне пришлось внести несколько изменений.В связи с этим я написал ниже код и сохраненные файлы на диск:

for each in form.cleaned_data['attachments']:
    handle_uploaded_file(each)

def uploadMyWork(request):
    from .forms import UploadFileForm, handle_uploaded_file
    print 'in uploadMyWork'

    if request.method == 'GET':
        print 'in uploadMyWork : GET'
        form = UploadFileForm()
    else:
        form = UploadFileForm(request.POST, request.FILES)
        print 'in uploadMyWork : POST'
        #for each in form.cleaned_data['attachments']:
        #    handle_uploaded_file(each)
        #return render(request, 'stitchme/uploadMyWork.html', {'msg': "file uploaded successfully"})

        if form.is_valid():
             print 'inside form valid'
             for each in form.cleaned_data['attachments']:
                 handle_uploaded_file(each)
             return render(request, 'stitchme/uploadMyWork.html', {'msg': "file uploaded successfully"})

    print 'returning to uploadmywork'
    return render(request, 'stitchme/uploadMyWork.html', {'form': form, 'msg':'hi'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...