2017-02-02 13 views
1

Django 1.8アプリケーションに単純なメッセージング機能を追加する必要があります。私はMessageモデルと、次のAttachmentモデルを持っている:Django:インラインフォームセットを使用するとアップロードされたファイルが失われる

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"> 
が欠落しています
関連する問題