Как вернуть значения формы и загрузить файл одновременно в Django?

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

<
from django import forms

class UserForm(forms.Form):
    first_name= forms.CharField(max_length=100)
    last_name= forms.CharField(max_length=100)
    email= forms.EmailField()
    file = forms.FileField() # for creating file input

My functions.py (эта функция позволяет пользователям загружать файл по пути 'mysite/upload/'.)

def handle_uploaded_file(f):  
    with open('mysite/upload/'+f.name, 'wb+') as destination:  
        for chunk in f.chunks():  
            destination.write(chunk)

Мой index.html

<head>
        <meta charset="UTF-8">
        <title>User Information Form</title>
        </head>
        <body>
        <form action="" method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="Submit" name="submit" value="Submit"/>
        </form>
        
        {% if submitbutton == "Submit" %} 
        <h1> Your first name is {{firstname}}</h1>
        <h1> Your last name is {{lastname}}</h1>
        <h1> Your email is {{emailvalue}} </h1>
        {% endif %}
        
        </body>
        <script>'undefined'=== typeof _trfq || (window._trfq = []);'undefined'=== typeof _trfd && (window._trfd=[]),_trfd.push({'tccl.baseHost':'secureserver.net'},{'ap':'cpbh-mt'},{'server':'p3plmcpnl487010'},{'dcenter':'p3'},{'cp_id':'8437534'}) // Monitoring performance to make your website faster. If you want to opt-out, please contact web hosting support.</script><script src='https://img1.wsimg.com/traffic-assets/js/tccl.min.js'></script></html>

Мой views.py

from django.shortcuts import render
from django.http import HttpResponse  
from .forms import UserForm
from mysite.functions import handle_uploaded_file

def index(request):
    submitbutton= request.POST.get("submit")

    firstname=''
    lastname=''
    emailvalue=''

    student = UserForm(request.POST, request.FILES)
    form= UserForm(request.POST or None)
    if form.is_valid() and student.is_valid():
        firstname= form.cleaned_data.get("first_name")
        lastname= form.cleaned_data.get("last_name")
        emailvalue= form.cleaned_data.get("email")
        handle_uploaded_file(request.FILES['file'])


    context= {'form': form, 'firstname': firstname, 'lastname':lastname,
              'submitbutton': submitbutton, 'emailvalue':emailvalue}
    
    return render(request, 'index.html', context)

Мой urls.py

from django.contrib import admin
from django.urls import path
from mysite import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',views.index),
    path('index/', views.index),
]

Однако он продолжает показывать, что "Я не выбрал ни один файл." на моей HTML-странице (как показано на рисунке ниже). <enter image description here>

Я попробовал следующий код в views.py, и он работает.

from django.shortcuts import render  
from django.http import HttpResponse
def index(request):  
    if request.method == 'POST':
        student = StudentForm(request.POST, request.FILES)  
        if student.is_valid():
            handle_uploaded_file(request.FILES['file'])

            newfile = request.FILES['file'].name
            firstname= student.cleaned_data.get("firstname")
            lastname= student.cleaned_data.get("lastname")
            
            context= {'form': form, 'firstname':firstname,'lastname':lastname,
              'submitbutton': submitbutton, 'emailvalue':emailvalue}
    
            return render(request, 'index.html', context)
    
Вернуться на верх