Django:使用内联表单集时上传的文件丢失
Django: uploaded files lost when using inline formset
我需要向 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
处理内联表单集的正确方法是什么?
您的表单缺少编码类型
<form action="" method="post" enctype="multipart/form-data">
我需要向 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
处理内联表单集的正确方法是什么?
您的表单缺少编码类型
<form action="" method="post" enctype="multipart/form-data">