我正在使用django-import-export库导入几本excel书籍。但是,我有超过1,000本需要导入数据库的书籍。有没有办法选择要上传的文件夹而不是选择和上传每个文件?我已经完成了这里的教程:https://django-import-export.readthedocs.org/en/latest/getting_started.html#admin-integration 但我无法找到问题的答案。
非常感谢任何帮助。
答案 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.py和XLS格式修改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
创建所有数据,但这目前效果很好。