Пустые ФАЙЛЫ запросов в django

У меня есть модель Django, содержащая поле fileField и форму ModelForm, которая запрашивает у пользователя загрузку файла. Однако, что бы я ни делал, request.FILES, возвращаемый сервером, ничего не содержит. Вот модель:

class RepoFile(models.Model):
    id = models.IntegerField(primary_key=True)
    repo = models.FileField(blank=False, null=True, upload_to="repos/")

МодельФормы:

class RepoUpload(forms.ModelForm):
    class Meta:
        model = RepoFile
        fields = ['repo']
        widgets = {
            'repo': ClearableFileInput(),
        }

И HTML

<form action="" method="post" enctype="multipart/form-data">{% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit" />
</form>

Вот представление, которое я использую:

    form = RepoUpload(request.FILES)
    if form.is_valid():
        print('this passed')
        form.save()

Я заметил, что независимо от того, какой файл я загружаю в разделе "Выберите файл", form.is_valid() возвращает false. Если я просто использую HTML и представление для отправки request.FILES в созданный вручную объект, len(request.FILES) возвращает 0. Кто-нибудь знает решение?

Вы неправильно указали init args в форме, правильно будет так:

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

Чтобы избежать этой ошибки, лучше использовать:

form = RepoUpload(data=request.POST, files=request.FILES, )

дополнительные kwargs для init:

data=None, 
files=None, 
auto_id='id_%s', 
prefix=None,
initial=None, 
error_class=ErrorList, 
label_suffix=None,
empty_permitted=False,
field_order=None,
use_required_attribute=None,
renderer=None

Читайте подробнее здесь: https://docs.djangoproject.com/en/4.0/ref/forms/api/#django.forms.Form

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