Как сохранить файл Excel и прикрепить его к новому объекту? - PullRequest
0 голосов
/ 18 января 2012

У меня есть проект django, и я создал файл excel, используя xlwt (конечный фрагмент создания файла).

export_wb.save(output)
output.seek(0)
response = HttpResponse(output.getvalue())
response['Content-Type'] = 'application/vnd.ms-excel'
response['Content-Disposition'] = 'attachment; filename='+filename
return response

Теперь, на мой взгляд, я хочу сгенерировать этот файл, присоединить его к новому объекту и сохранить его, поэтому у меня есть новый объект в админке с прикрепленным файлом excel. Я пытаюсь что-то вроде этого

def test(request):
    exported_ingredients = export(request, app_name='ingredients', model_name='ingredient')
    new_export = IngredientExportItem(file_name="x", slug="x", file=exported_ingredients)
    new_export.save()
    return HttpResponseRedirect('/')

Я продолжаю получать эту ошибку, хотя: 'HttpResponse' object has no attribute '_committed'

Не похоже, что объект, который я устанавливаю для свойства 'file' (file является полем загрузки файла). Если я просто верну объект, тогда мой браузер загрузит файл правильно, так что файл в порядке.

1 Ответ

2 голосов
/ 18 января 2012

Ваш ответ - не объект файла django, это объект django HttpResponse.

Извлеките ContentFile , если вы хотите создать объект файла django из строки.

from django.core.files.base import ContentFile

def test(request):
    http_response = export(request, app_name='ingredients', model_name='ingredient')
    file_ = ContentFile(http_response.content)
    file_.name = http_response['Content-Disposition'].split('=')[-1] 

    new_export = IngredientExportItem(file_name="x", slug="x", file=file_)
    new_export.save()
    return HttpResponseRedirect('/')
...