【问题标题】:Django File Upload Not Saving To FilesystemDjango文件上传不保存到文件系统
【发布时间】:2017-12-14 18:23:48
【问题描述】:

当我上传文件时,我得到一个“POST /submit/HTTP/1.1”200 604。当我检查上传的文件时我找不到它。

设置文件包括:

 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 MEDIA_URL = '/media/'
 MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

型号:

 from django.db import models 

 class Document(models.Model):
    description = models.CharField(max_length=255, blank=True)
    document = models.FileField(upload_to='documents/')
    uploaded_at = models.DateTimeField(auto_now_add=True)

表格:

from django import forms
from mysite.uploads.models import Document

class DocumentForm(forms.ModelForm):
    class Meta:
        model = Document
        fields = ['description', 'document']

观看次数:

 from django.shortcuts import render
 from django.http import HttpResponseRedirect
 from django.core.urlresolvers import reverse

 from mysite.uploads.models import Document
 from mysite.uploads.forms import DocumentForm

def model_upload(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            form.save(commit=True)
            return HttpResponseRedirect(reverse('uploadindex'))
   else:
       form = DocumentForm()
   return render(request, 'uploads/index.html', {
    'form': form
})

网址:

from django.conf.urls import url

from mysite.uploads  import views

urlpatterns = [
    url(r'^$', views.model_upload, name='uploadindex'),
]

模板:我正在使用 multipart/form-data,不确定为什么文件无法上传。

 <html>
    <body>
    <form action="{% url "uploadindex" %}" 
       method="post"encytpe="multipart/form-data">
       {% csrf_token %}
       {{ form.as_p }}
       <button type="submit">Upload</button>
    </form>
    </body>
 </html>

【问题讨论】:

  • if form.is_valid(): 的验证是否有效?像print test一样在其中添加一个打印语句,并在控制台中检查它是否为真。

标签: django python-3.x django-file-upload


【解决方案1】:

我的猜测是您的 DocumentForm 无效,并且您在 document 字段上遇到错误,但没有在模板中呈现任何反馈来表明这一点。

检查您是否在表单标签上设置了适当的编码。这是通过 Django 表单处理文件上传时最常见的问题:

请注意,request.FILES 仅在请求方法为 POST 且发布请求的具有 enctype="multipart/form-data" 属性的情况下才会包含数据

https://docs.djangoproject.com/en/1.11/topics/http/file-uploads/#basic-file-uploads

【讨论】:

  • 这是我的模板表单
    {% csrf_token %} {{ form .as_p }}
【解决方案2】:
...
if form.is_valid():
        form.save(commit=True)
        return HttpResponseRedirect(reverse('uploadindex'))
else:
    print form.errors
...

如果您的 document 字段有任何错误,它将显示错误。

【讨论】:

  • 我添加了form.errors并得到:
    • document
      • 此字段为必填项。
  • 所以错误出现在您的表单字段中。保存期间未填充字段。
  • method="post"encytpe="multipart/form-data" 没有空格的两个属性你用了吗?请改正
  • 现在可以了,我拼写为 encytpe 而不是 enctype。谢谢。
猜你喜欢
  • 2014-09-08
  • 2010-09-20
  • 2018-06-30
  • 2012-11-27
  • 2018-05-05
  • 1970-01-01
  • 2017-09-22
  • 2013-12-26
  • 1970-01-01
相关资源
最近更新 更多