【问题标题】:Django-Import-Export assign Field to specific columnDjango-Import-Export 将字段分配给特定列
【发布时间】:2022-01-18 10:17:51
【问题描述】:
我有一个工作表单,它使用 django-import-export 包中的资源和字段将所有数据导出到 xls。但现在我需要更进一步,让它更先进一点。我需要将所有数据导出到现有的 Excel 模板中,将每个字段分配给特定的列,例如:字段 1 需要填写在 B3 中,字段 2 需要填写在 C4 中等等。
我在想after_export() 可以在这里使用,但文档没有详细说明如何使用此方法。有人对这个包有一些经验吗?
我没有使用管理员集成。
【问题讨论】:
标签:
python
django
excel
django-import-export
【解决方案1】:
after_export() 是一种您可以重写以在返回数据之前对其进行修改的方法。
默认情况下它什么都不做。但是,它提供data 对象,这是一个Dataset 实例。如果您访问dict 属性,那么您将拥有与查询集返回的每一行相对应的OrderedDict 实例列表。因此,您可以构建一个与您需要的格式匹配的全新数据集(dicts 列表)。
例如,如果您希望第一行的第一列出现在单元格 B3 中,您可以这样做:
def after_export(self, queryset, data, *args, **kwargs):
newdata = tablib.Dataset()
cell1_val = data.dict[0].get("col1", "")
for i, row in enumerate(data):
if i == 1:
newrow = list(row)
# cell b3
newrow[2] = cell1_val
row = newrow
newdata.append(row)
data.dict = newdata.dict
但是,您会注意到这种方法不容易阅读并且非常笨拙。因此,如果您不需要 django-import-export 的任何其他功能,那么使用像 openpyxl 这样的库可能是更好的方法。