Мне нужно добавить простую функцию обмена сообщениями в приложение 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
?