2017-02-02 36 views
1

我需要添加一個簡單的消息功能到Django 1.8應用程序。我有一個Message模型和下列Attachment型號:Django:上傳文件丟失時,使用內聯formset

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來處理內嵌式表單的正確方法是什麼?

回答

1

您的形式缺少ENCTYPE

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