2016-01-12 39 views
3

我想實現一個簡單的xls文件導入並使用django-import-export保存到模型。 不幸的是,文檔只涵蓋管理集成。 我在這裏停留在我的示例代碼:django-import-export outside admin

class UploadFileForm(forms.Form): 
    file = forms.FileField() 


class ExportSpec(resources.ModelResource): 
    class Meta: 
     model = Specialty 

view: 
def ca_import(request): 
    if request.method == 'POST' and 'import_test' in request.POST: 
     form = UploadFileForm(request.POST, request.FILES) 
     if form.is_valid(): 
      filehandle = request.FILES['file'] 
      dataset = ??? 
      result = ExportSpec().import_data(dataset, dry_run=False, 
              raise_errors=True, 
              user=request.user) 

有人用這個模塊的瞭解可以幫助我完成代碼把這個通用的例子嗎?

或者是有一個通用的例子,在網上找到我沒有發現使用谷歌?

編輯:

基於亞歷克斯回答我能找到一個有效的解決方案:

def ca_import(request): 
    if request.method == 'POST' and 'import_test' in request.POST: 
     form = UploadFileForm(request.POST, request.FILES) 
     if form.is_valid(): 
      file = form.cleaned_data['file'] 
      data = bytes() 
      for chunk in file.chunks(): 
       data += chunk 
      dataset = XLS().create_dataset(data) 
      result = ExportSpec().import_data(dataset, dry_run=False, raise_errors=True, user=request.user) 
+0

代碼看起來不錯,到目前爲止。你遇到什麼樣的錯誤,或者你面臨什麼具體問題? –

+0

請參閱行「dataset = ???」。我相信我必須從文件句柄中獲取數據集。 – caliph

回答

3

您應該使用Format.create_dataset()方法:

from import_export.formats.base_formats import XLS 

def your_view(): 
    filehandle = form.cleaned_data['file'] 
    data = bytes() 
     for chunk in import_file.chunks(): 
      data += chunk 
    dataset = XLS().create_dataset(data) 
    result = ExportSpec().import_data(...) 
+0

我試了一下,我得到'filehandle.content'錯誤'ExcelInMemoryUploadedFile'對象沒有屬性'內容' – caliph

+0

對不起,我只是沒有安裝'django-import-export',所以可能需要一些時間擊中目標)。如果你嘗試表單的'file'字段呢?查看更新後的答案。 –

+0

你的回答引導我走向正確的方向。我查看了模塊的源代碼,並在上面的編輯中生成了代碼行。也許有一個更簡單的方法,但這是有效的。 – caliph