【问题标题】:Django FileField, unable to uploadDjango FileField,无法上传
【发布时间】:2016-03-29 11:07:55
【问题描述】:

我有课:

class Course(models.Model):
    name = models.CharField(
        max_length=255,
        )
    upload = models.FileField(upload_to='courses/')

当用户添加新课程时,它会提示我输入标题并选择文件。在我输入标题并选择文件后,会出现文件名。当我按下保存按钮时,文件名消失并且我收到消息“此字段是必需的” 这是我的模板:

<form action="{% url "courses-new" %}" method="POST">
  {% csrf_token %}
  <ul>
    {{ form.as_ul }}
  </ul>
  <input id="save_course" type="submit" value="Save" />
</form>

<a href="{% url "courses-list" %}">back to list</a>

【问题讨论】:

  • 请同时显示您的 views.py 和 forms.py。

标签: django forms file model


【解决方案1】:

您应该将表单编码类型设置为multipart/form-data。像这样:

<form action="{% url "courses-new" %}" method="POST" enctype="multipart/form-data">

来自django-docs

请注意,request.FILES 将仅包含请求方法中的数据 是 POST 并且发布请求的具有属性 enctype="multipart/form-data"。否则,request.FILES 将为空。

【讨论】:

  • 它工作了,现在我想当用户点击课程名称旁边的“查看”时,显示上传的文件。这就是我开始的方式: class DetailCourseView(DetailView): model = Course template_name = 'course/course_view.html' fields = 'all' ......这是我的“索引”视图...
  • DetailView 没有名为 fields 的属性。你应该删除它:)
  • Thx,但这并不能回答我的第二个问题。在 ListCourseView 我得到所有课程的列表并在它旁边查看、编辑和删除链接,我想要做的是当 some1 按视图打开上传到该课程的文件。到目前为止,我在视图中点击:/course/view/34/ 其中 34 是课程 ID(pk)。那么如何在单击“查看”时直接打开其上传的文件?我需要在 Class DetailCourseView 中做什么以及在 course_view.html 中做什么?提前泰
  • 我试过这个: def show_files(request, pk): objects = Course.objects.get(id=pk) return render_to_response('course/course_view.html', {'objects':对象}, context_instance=RequestContext(request)) --------------- 模型 : def display_file(self): self.upload.open() return self.upload.file.read() .replace('\n', '
    ') ------------- HTML:

    {{objects.name}} {{objects.display_file}}

    -------- 我只能打开文本文件,它们看起来有点丑
  • 你真正想在这里做什么?你面临什么问题?是否希望用户强制下载上传的文件?
猜你喜欢
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 2015-03-16
  • 2012-08-12
  • 2019-12-04
相关资源
最近更新 更多