django-import-export导入多个文件

时间:2015-05-06 20:52:48

标签: django-import-export

我正在使用django-import-export库导入几本excel书籍。但是,我有超过1,000本需要导入数据库的书籍。有没有办法选择要上传的文件夹而不是选择和上传每个文件?我已经完成了这里的教程:https://django-import-export.readthedocs.org/en/latest/getting_started.html#admin-integration 但我无法找到问题的答案。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

主要为将来的观众发布信息。当前,django_import_export仅导入单个excel工作簿的活动/第一张纸。但是,该代码很容易修改和缓解此问题。在forms.py中,有ImportForm是从admin导入时使用的那个。只需将import_file字段更改为以下内容:

import_file = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': 
                             True}),
                             label=_('File to import')
                             )

admin.py中使用此格式来处理文件数据。将链接的行更改为类似的内容:

import_files = request.FILES.getlist('import_file')
for import_file in import_files:
    ...

现在剩下的就是以base_formats.pyXLS格式修改XLSX的导入过程。两者的更改几乎相同,这里我将概述XLS

而不是获取第一张图纸,而是在图纸上运行for循环并将数据附加到数据集。

dataset = tablib.Dataset()
first_sheet = True    # If you keep all correct headers only in first sheet
for sheet in xls_book.sheets():
    if first_sheet:
        dataset.headers = sheet.row_values(0)
    first_sheet = False
    for i in moves.range(1, sheet.nrows):
        dataset.append(sheet.row_values(i))
return dataset

对于XLSX,循环将在xlsx_book.worksheets上运行。其余部分类似于xls

这将允许您选择多个excel工作簿并导入该工作簿的所有工作表。我知道理想的解决方案是导入一个zip文件,以使用单个bulk_create创建所有数据,但这目前效果很好。