Пустые ФАЙЛЫ запросов в 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