2017-02-02 10 views
1

Мне нужно добавить простую функцию обмена сообщениями в приложение Django 1.8. У меня есть Message модель и следующую Attachment модель:Django: загруженные файлы потеряны при использовании встроенного набора форм

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

Должна быть предусмотрена возможность для пользователя, чтобы создать сообщение с несколькими вложениями с помощью этого formset:

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">