2012-01-17 40 views
0

我有一个django项目,我创建了一个使用xlwt(文件生成结束片段)的excel文件。如何保存一个excel文件并将其附加到新的对象?

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'

似乎不喜欢我设置为“文件”属性的对象(文件是一个FileUpload场) 。如果我只是返回对象,那么我的浏览器会正确下载文件,以便文件正常。

+1

你可以发布完整的追溯? – plaes 2012-01-17 22:49:50

+0

这里是完整的追溯http://dpaste.com/689377/ – darren 2012-01-17 23:36:10

回答

2

您的回复不是django文件对象,它是一个django HttpResponse对象。

如果要从字符串创建django文件对象,请检出ContentFile

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('/') 
+0

谢谢Yuji!我感到困惑,因为对象正确下载,但现在我看到你需要将它转换为正确的类型来保存它。 – darren 2012-01-18 08:49:00

+0

@mongoose_za,NP - 这是浏览器解释它是基于“Content-Disposition”和其他头文件的下载。 – 2012-01-18 08:50:16

相关问题