Что я не делаю правильно в этой форме загрузки файла Django? - PullRequest
15 голосов
/ 30 мая 2011

Это моя форма:

from django import forms

class UploadFileForm(forms.Form):
    titl    = forms.CharField(max_length=50)
    ffile   = forms.FileField()

Это мой файл views.py:

def handle_uploaded_file(file_path):
    print "handle_uploaded_file"
    dest = open(file_path.name,"wb")
    for chunk in file_path.chunks():
        dest.write(chunk)
    dest.close()

def handle_upload(request):
    c = {}
    c.update(csrf(request))
    if request.method == "POST":
        form = UploadFileForm(request.POST)
        if form.is_valid():
            handle_uploaded_file(request.FILES["ffile"])
            return HttpResponseRedirect("/thanks")
    else:
        form = UploadFileForm()
    c.update({"form":form})
    return render_to_response("upload.html",c)

А это содержимое файла upload.html:

<form enctype="multipart/form-data" method="post" action="/handle_upload/">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Upload it"/>
</form>

Всякий раз, когда я пытаюсь отправить форму, я получаю «Это поле обязательно для заполнения» для поля ffile. Что я делаю неправильно? Просто упомяну, я загружаю файл каждый раз.

Ответы [ 3 ]

44 голосов
/ 01 апреля 2013

Только для дальнейшего использования.У меня была такая же ошибка, хотя я включил request.FILES в инициализацию формы.Проблема была в шаблоне: я забыл добавить атрибут enctype="multipart/form-data" в тег <form>.

30 голосов
/ 30 мая 2011
    form = UploadFileForm(request.POST, request.FILES)
0 голосов
/ 18 апреля 2017

Если вы включили request.FILES и добавили enctype="multipart/form-data", но все еще видят эту ошибку, возможно, вы неправильно объявляете <input>.

ДляНапример, если явно объявить входной html в вашем шаблоне, например:

<input type="file" value="Upload CSV File" />

Возможно, вы не передаете ожидаемые атрибуты ввода id или имени элемента формы ввода.

Убедитесь, что вашВ шаблоне используется тег элемента формы, то есть {{ form.file }}, который django будет отображать на странице как: <input id="id_file" name="file" type="file" required="">.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...