2016-01-12 37 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