在Django中上传文件时格式无效

时间:2019-05-21 10:59:53

标签: html django

我需要在Django页面上上传文件,但是,按照官方教程进行操作后,我无法上传文件,它始终显示错误“无效表格”,并且当我尝试打印出错误信息时,表格上显示“此字段为必填”。

值得注意的一件事是:我在一页上有2个表单,一个是upload form,另一个是用于填写information。不知道这是否是根本原因。

我尝试了Internet上提供的所有解决方案。

模板文件:

<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 个答案:

答案 0 :(得分:1)

您的模板错误。使用{{ form.as_p }}都应显示一个文件输入字段,因为file是表单中的一个字段。 (因此请删除<input type="file" ...>

或者不使用它并手动添加<input>字段,但是您必须使用正确的名称。您的表单需要一个“文件”参数,而不是一个“源文件”参数:

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

此外,您还使视图中的事情变得过于复杂(即使您当前的代码在修复模板后也可以使用):

if form.is_valid():
    form.save()  # this will save your model
    return redirect(...)