Как загрузить файл из html в Django формы

Каждый раз, когда я загружаю файл, forms.is_valid() = False.

ниже представлен мой views.py:

def upload_pdf(request):
    if request.method == 'POST':

        form = UploadFileForm(request.POST, request.FILES)

        if form.is_valid():  # this is always FALSE!!!
            
            # write file into folder first
            text = handle_uploaded_file(request.FILES['file'])
            print("text")
            return HttpResponseRedirect('pdfExtractor_app/result.html')
    else:
        print("form not valid")
        form = UploadFileForm()
    return render(request, 'pdfExtractor_app/upload.html', {'form': form})

Вот мой файл forms.py:

from django import forms

class UploadFileForm(forms.Form):
    title = forms.CharField(max_length=50)
    file = forms.FileField()

Вот мой файл upload.html:

<body>  
<form method="POST" class="post-form">  
        {% csrf_token %}  
        {{ form.as_p }}  
        <button type="submit" class="save btn btn-default">Save</button>  
</form>  
</body>  

Я ввожу название и файл, но форма никогда не считывается в views.py.

Вот что я получаю form.errors

 <ul class="errorlist"><li>file<ul class="errorlist"><li>This field is required.</li></ul></li></ul>        
[15/Dec/2021 21:10:56] "POST /upload_pdf/ HTTP/1.1" 

Вот что есть в Querydict:

<QueryDict: {'csrfmiddlewaretoken': ['b123ASDDoddfkkdzrPXa5P2kKEsp7dBASXQWXfffwwdffgKGLGVVffML'], 'title': ['as'], 'file': ['UsabilityTest.pdf']}>

Спасибо!

Добавление enctype="multipart/form-data" к тегу формы в шаблоне помогло и сделало form.is_valid() равным true.

Я изменил uploads.html на:

<body>  
<form method="POST" class="post-form" enctype="multipart/form-data">  
        {% csrf_token %}  
        {{ form.as_p }}  
        <button type="submit" class="save btn btn-default">Save</button>  
</form>  

Спасибо всем за полезные отзывы в комментариях!

Вернуться на верх