MultiValueDictKeyError при загрузке нескольких файлов

Цель: Я хочу иметь несколько полей загрузки файлов из одной модели, в одном представлении и в одном шаблоне. Проблема в том, что я получаю эту ошибку: 'MultiValueDictKeyError' при отправке почтового запроса. Я искал https://stackoverflow.com/search?q=MultiValueDictKeyError+file+upload, но ни один из ответов не подходит - так как они охватывают только одно поле загрузки файла.

Некоторый контекст: Не все файлы обязательны для загрузки, некоторые могут быть пустыми. Пользователь просто загружает все файлы, которые могут быть использованы.

models.py

def user_directory_path(instance, filename):
    return 'PDFs/{1}'.format(instance.user, filename)

class PDFUpload(models.Model):
class Meta:  
    verbose_name_plural = 'PDF Uploads'

user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
pas = models.FileField(upload_to=user_directory_path, null=True, blank=True, validators=[FileExtensionValidator(['pdf'])])
add_pass = models.FileField(upload_to=user_directory_path, null=True, blank=True, validators=[FileExtensionValidator(['pdf'])])
gas_safe = models.FileField(upload_to=user_directory_path, null=True, blank=True, validators=[FileExtensionValidator(['pdf'])])
oftec = models.FileField(upload_to=user_directory_path, null=True, blank=True, validators=[FileExtensionValidator(['pdf'])])
hetas = models.FileField(upload_to=user_directory_path, null=True, blank=True, validators=[FileExtensionValidator(['pdf'])])
bba = models.FileField(upload_to=user_directory_path, null=True, blank=True, validators=[FileExtensionValidator(['pdf'])])

forms.py

class PDF(forms.ModelForm):
    class Meta:
        model = PDFUpload
        fields = ['pas', 'add_pass', 'gas_safe', 'oftec', 'hetas', 'bba']
        widgets = {
            'pas': ClearableFileInput(attrs={'multiple': True}),
            'add_pass': ClearableFileInput(attrs={'multiple': True}),
            'gas_safe': ClearableFileInput(attrs={'multiple': True}),
            'oftec': ClearableFileInput(attrs={'multiple': True}),
            'hetas': ClearableFileInput(attrs={'multiple': True}),
            'bba': ClearableFileInput(attrs={'multiple': True}),
        }
        
        labels = {
            "pas": "PAS",
            "add_pass": "Additional PAS (if applicable",
            "gas_safe": "Gas Safe",
            "oftec": "OFTEC",
            "hetas": "HETAS",
            "bba": "BBA",
            }

views.py

@login_required
def upload(request):
    if request.method == 'POST':
        pdf_upload = PDF(request.POST, request.FILES)
        error_message = "Only PDF files are allowed"
        if pdf_upload.is_valid():
            pdf_upload = PDFUpload(file=request.FILES['pas', 'add_pass', 'gas_safe', 'oftec', 'hetas', 'bba'], user=request.user)
            pdf_upload.owner = request.user
            pdf_upload.save()
            request.user.save()
            uploaded = True
            return render(request, 'upload.html', {'uploaded': uploaded})
        else:
            pdf_upload = PDF()
            return render(request, 'upload.html', {'pdf_upload': pdf_upload, 'error_message': error_message})
    else:
        pdf_upload = PDF()
        return render(request, 'upload.html', {'pdf_upload': pdf_upload})

upload.html

{% if not uploaded %}
<form method = 'POST' enctype="multipart/form-data">
    {% csrf_token %}
    {{pdf_upload.as_p}}
    <br/>
<p><button type = "submit" class = "waves-effect waves-light btn" style = "background-color: pink">Upload Documents</button></p>
</form>
{% endif %}

Изображение шаблона:

Template view

Не могли бы вы сообщить мне лучший способ достижения моей цели?

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