如何使用Django上载文件

如何使用Django上载文件,django,Django,我正在尝试编写表单,用Django上传一个文件。管理员表单工作正常,但问题是在我单击表单上的“提交”后,表单会丢失我选择的文件(文件名消失,“选择文件”按钮旁边会显示“未选择文件”),并且视图不会验证表单,因为文件丢失。我的表单/视图/文件处理程序看起来就像 forms.py views.py models.py attach.html {%extends“base.html”%} {%block title%}添加附件{%endblock%} {%block content%} 附件:检查{{

我正在尝试编写表单,用Django上传一个文件。管理员表单工作正常,但问题是在我单击表单上的“提交”后,表单会丢失我选择的文件(文件名消失,“选择文件”按钮旁边会显示“未选择文件”),并且视图不会验证表单,因为文件丢失。我的表单/视图/文件处理程序看起来就像

forms.py views.py models.py attach.html
{%extends“base.html”%}
{%block title%}添加附件{%endblock%}
{%block content%}
附件:检查{{insp_id}
此表格用于将文件附加到检验单

{%csrf_令牌%} {%形式的字段为%} {{field.label_tag}}: {{field}} {{field.errors | striptags}} {%endfor%} {%endblock%}
你知道我做错了什么吗?

改变这个

handle_uploaded_file(request.FILES['file'])
对此

handle_uploaded_file(request.FILES['attachment'])

该文件存储在POST数据中,并带有您字段的名称。

您也可以发布模板代码吗?需要记住的一件重要事情是:“请注意,如果请求方法为POST,并且发布请求的属性为enctype=“multipart/form data”,则request.FILES将包含数据。否则,request.FILES将为空。”作为旁注,您可以使用
auto\u now
auto\u add\u now
()DateTimeFields的属性,这样您就不需要覆盖save方法
auto\u now
每次保存时都会更新日期,而
auto\u add\u now
只是创建日期,将enctype=“multipart/form data”添加到表单标记中修复了该问题,但现在它抛出了一个多值dictkeyError,说明“Key‘file’not found in”
class Attachment(models.Model):
    insp = models.ForeignKey(Inspection)
    contributor = models.ForeignKey(User, related_name='+')
    date = models.DateTimeField()
    title = models.CharField(max_length=50)
    attachment = models.FileField(upload_to='attachments')
    def __unicode__(self):
        return self.title
    def save(self):
        if self.date == None:
            self.date = datetime.now()
        super(Attachment, self).save()
    class Meta:
        ordering = ['-date']
{% extends "base.html" %}

{% block title %}Add Attachment{% endblock %}

{% block content %}
<h2>Attach File: Inspection {{ insp_id }}</h2>
<p>This form is used to attach a file to an inspection.</p>
<form action="." method="POST" autocomplete="off">{% csrf_token %}
    <table cellspacing="10" cellpadding="1">
        {% for field in form %}
            <tr>
            <th align="left">               
                {{ field.label_tag }}:
            </th>
            <td>
                {{ field }}
            </td>
            <td>
                {{ field.errors|striptags }}
            </td>
        </tr>
        {% endfor %}
        <tr><td></td><td><input type="submit" value="Submit"></td></tr>
    </table>
</form>
{% endblock %}
handle_uploaded_file(request.FILES['file'])
handle_uploaded_file(request.FILES['attachment'])