2012-01-17 109 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

相關問題