Неверная форма при загрузке файла в Django - PullRequest
1 голос
/ 21 мая 2019

Мне нужно загрузить файл на страницу Django, однако после выполнения официального урока я не смог его загрузить, он всегда выдает ошибку «Недопустимая форма», и при попытке распечатать сообщение об ошибкеформа, в которой написано «Это поле обязательно для заполнения».

Одна вещь, которая заслуживает внимания: у меня есть 2 формы на одной странице, одна это upload form, а другая - для заполнения information.Не уверен, что это коренная причина.

Я испробовал все решения, представленные в Интернете.

Файл шаблона:

<form id="uploadForm" action="" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="file" value="upload" name="sourcefile">
    <button type="submit">Upload</button>
</form>

Forms.py:

from django import forms
from .models import SourceFile

class UploadFileForm(forms.ModelForm):
    class Meta:
        model = SourceFile
        fields = ('file', 'title')

Models.py:

from django.db import models

# Create your models here.
class SourceFile(models.Model):
    title = models.CharField(max_length=255, blank=True)
    file = models.FileField(upload_to="media/")

Views.py

def model_form_upload(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            instance = SourceFile(file_field=request.FILES['file'])
            instance.save()
            return JsonResponse({'error': False, 'message': 'Uploaded Successfully!'})
        else:
            print("Invalid form")
            # return JsonResponse({'error': True, 'errors': form.errors})
    else:
        form = UploadFileForm()
    return render(request, 'source_validation.html', {'form': form})

1 Ответ

1 голос
/ 21 мая 2019

Ваш шаблон неверен.Либо используйте {{ form.as_p }}, который должен отображать поле ввода файла, потому что file - это поле в вашей форме.(поэтому удалите <input type="file" ...>)

Или не используйте его и добавьте поля <input> вручную, но тогда вы должны использовать правильные имена.Ваша форма ожидает параметр "file", а не параметр "sourcefile":

<input type="file" name="file">

Кроме того, вы слишком усложняете вещи в своем представлении (даже если ваш текущий код будет работать, если вы исправите свой шаблон):

if form.is_valid():
    form.save()  # this will save your model
    return redirect(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...