【问题标题】:Django: uploaded files lost when using inline formsetDjango:使用内联表单集时上传的文件丢失
【发布时间】:2017-06-19 10:17:43
【问题描述】:

我需要向 Django 1.8 应用程序添加一个简单的消息传递功能。我有一个Message 模型和以下Attachment 模型:

class Attachment(models.Model):
    message = models.ForeignKey(Message)
    file = models.FileField()

用户应该可以使用此表单集创建带有多个附件的消息:

AttachmentFormset = inlineformset_factory(Message, Attachment, extra=1, exclude=[], can_delete=False)

这是所有表单在我的模板中的呈现方式:

<form action="" method="post">
    {% csrf_token %}
    {{ msg_form.as_p }}

    {{ attachment_formset.management_form }}
    {% for form in attachment_formset.forms %}
        {{ form.as_p }}
    {% endfor %}
    <input class="button" type="submit" value="{% trans 'Send'%}"></input>
</form>

这就是我在视图中处理表单的方式:

if request.method == "POST":
    msg_form = MessageForm(request.POST)
    attachment_formset = AttachmentFormset(request.POST, request.FILES)
    sender = request.user
    if msg_form.is_valid() and attachment_formset.is_valid():
        msg = msg_form.save(sender=sender)
        for aform in attachment_formset:
            a = aform.save(commit=False)
            a.message = msg
            a.save()

问题在于,不知何故,request.FILES 总是空的,附件表单的cleaned_data 也是空的。上传的文件怎么了?!使用FileField 处理内联表单集的正确方法是什么?

【问题讨论】:

    标签: django django-forms django-1.8


    【解决方案1】:

    您的表单缺少 enctype

    <form action="" method="post" enctype="multipart/form-data">
    

    【讨论】:

      猜你喜欢
      • 2015-07-09
      • 2020-11-05
      • 1970-01-01
      • 2019-05-15
      • 2020-09-14
      • 1970-01-01
      • 2011-07-03
      • 2011-07-11
      • 1970-01-01
      相关资源
      最近更新 更多