Моделька
class Attachment(models.Model):
...
file = models.FileField(
upload_to='/media',
verbose_name='File'
)
...
Форма
<form class="..." method="POST" id="..." enctype="multipart/form-data">
{% csrf_token %}
<div class="...">
<button class="...">Upload files</button>
<input type="file" name="files" id="files" multiple>
</div>
<div class="...">
<button class="..." type="submit" form="...">Create</button>
</div>
</form>
View
@csrf_protect
@login_required
def EditView(request,pk=None):
if request.method == 'POST':
try:
...
for f in request.FILES.getlist('files'):
post.attachments.append(f)
post.full_clean()
post.save()
return redirect('/app/posts/' + str(post.id) + '/#comments')
except ValidationError as e:
...
context.update({
'self': request.user,
'post': post,
'errors': errors,
'messages': messages.get_messages(request)
})
return render_to_response('app/posts/edit.html', context, context_instance=RequestContext(request))
И кусок модельки в которой идет сохранение
class Post(models.Model):
...
attachments = []
def save(self, *args, **kwargs):
super(Post, self).save(*args, **kwargs)
if len(self.attachments) > 0:
from .attachment import Attachment
for attachment in self.attachments:
a = Attachment(post=self.pk, file=attachment, original=str(attachment))
a.full_clean()
a.save()
self.attachments = []
Ну а теперь вопрос к знатокам
Attachment не обязательное поле
При сохранении если файлики есть то они сохраняются, все отлично
Но если следом сделать еще один POST без аттачей то вылетает ошибка "I/O operation on closed file."
Получается что в request.FILES есть
[<InMemoryUploadedFile: file.txt (text/plain)>, ...]
с прошлого POST
Как их от туда убрать и где?