Xadmin导入excel数据及再加工数据的记录

导入excel数据

class GoodsCustomerAdmin(object):
    import_export_args = {'import_resource_class': GoodsCustomerResources, }
    resource_class = GoodsCustomerResources

import_export_args :用于指定导入菜单,默认已有导出菜单了。

save_models(适合新建记录后加工处理)

备注:此方法重写的是单记录操作,如果是批量导入数据的话,是不奏效的。
换一句话说:你在changelist页面点击保存或才会执行这个save。

    def save_models(self):
        obj = self.new_obj  # 此obj 代表的是模型处于编辑状态下的记录(行)
        bind = list(GoodsCompany.objects.values_list('goods_bind', flat=True))
        no = list(GoodsCompany.objects.values_list('goods_no', flat=True))
        query = '%s %s %s' % (obj.goods_name, obj.spec, obj.manufacturer)
        result = process.extractOne(query, bind, score_cutoff=90)
        if result:
            obj.goods_bind = result[0]
            idx = bind.index(result[0])
            obj.goods_company = no[idx]

        super().save_models()

缩减导入数据的预览表格行数

当你导入10000行数据的时候,阅览数据意义不大。既然自己导入,自然是先加工好的,所以,只要展示表头或几行数据就够了,确认下是不是导入对了表格。
1、找到路径:xadmin\plugins\importexport(xadmin包源码)
大概在156行处,可以找到ImportView视图;
再往下,在234行处:

result = resource.import_data(dataset, dry_run=True,
                                          raise_errors=False,
                                          file_name=import_file.name,
                                          user=request.user)

在context[‘result’] = result后增加下边语句:

# 取result前N行作为预览页面的N行数据
            if len(result.rows) < 20:   # 20这个数据自由修改
                result2 = result.rows
            else:
                result2 = result.rows[:20]
            context['result2'] = result2

context[‘result2’]作用是通过TemplateResponse传入result2变量。

2、修改模板
找到路径:templates/xadmin/import_export/import.html(xadmin包源码)
在大约99行位置,
将{% for row in result.rows %}改成{% for row in result2 %}

数据批量导入前预处理

导入流程简要说明:import_data是import-export第三方库导入数据的核心函数,里边包含了很多预处理数据的函数。但是有个蛋疼的地方。这个导入数据大概的流程是先把导入的数据读取后放到临时文件中,会用到一次import_data。然后阅览确认后再从临时文件import_data到数据库。
例子:模糊匹配商品
before_save_instance:其中instance参数就是每一行导入数据object。

    def before_save_instance(self, instance, using_transactions, dry_run):
        goods_no = instance.goods_no
        customer_no = instance.customer_no

        try:
            GoodsCustomer.objects.get(goods_no=goods_no, customer_no=customer_no)
        except GoodsCustomer.DoesNotExist:
            query = '%s %s %s' % (instance.goods_name, instance.spec, instance.manufacturer)
            bind = list(GoodsCompany.objects.values_list('goods_bind', flat=True))
            no = list(GoodsCompany.objects.values_list('goods_no', flat=True))
            result = process.extractOne(query, bind, score_cutoff=90)
            if result:
                instance.goods_bind = result[0]
                idx = bind.index(result[0])
                instance.goods_company = no[idx]

我试了一个预处理,由于这个import_data用了两次,每次都会调用before_save_instance,结果你懂得,不是重复操作一次预处理嘛。
所以,如果预处理结果复杂及条目数多的情况,还是换成其他办法来处理。

导入数据后的信息展示

1、在django官方文档,找到Common Web application tools部分,里边有一个“Messages framework”,里边详细介绍了怎么应用消息通知。
2、xadmin文档的base.html中,大约在44行{% view_block ‘extrabody’ %}后,添加如下代码:

{% if messages %}
    <ul class="messages">
    {% for message in messages %}
        <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>
            {% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %}Important: {% endif %}
            {{ message }}
        </li>
    {% endfor %}
    </ul>
{% endif %}

3、其实在Xadmin的importexport.py中ImportProcessView视图已经添加了消息:

success_message = str(_(u'Import finished')) + ' , ' + str(_(u'Add')) + ' : %d' % result.totals[
                RowResult.IMPORT_TYPE_NEW] + ' , ' + str(_(u'Update')) + ' : %d' % result.totals[
                                  RowResult.IMPORT_TYPE_UPDATE]

            messages.success(request, success_message)

结合第2步,就会在预览数据确认后,等全部导入完成后就会在列表页的上头增加一条蓝色的条框,里边就会显示:导入完毕,一共更新了N条记录。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
工具: 【批量导入图片】 功能: 根据名称批量地导入图片 特点: 1.速度快:导入100图片只需要2秒钟 2.位置准:每张图片都导入到名称后面的单元格中,且刚好和单元格一样大,不会让多张图片重叠 3.大小灵活:导入的图片可以随心所欲定义其大小,且所有图片都占用相同的大小空间。但却保持图片导入前的比例,不会变形。 4.名称灵活:可以使用近似匹配。例如有两张名为“诺基亚8310”、“诺基亚7600”的图片,只需要在单元格输入“诺基亚”就行了,导入图片时可以将“诺基亚”开头的图片全部导入。 5.数量灵活:对于多个图片符合同一单元格名称的状况,可以将所有图片全部导入到其右边的单元格。 6.附件功能:图片导入到工作表后,将Excel默认的图片名“图片1”、“图片2”还原为图片本来的名称。 工具: 【隔行插入行】 功能: 对工作表隔行插入行,或者隔列插入列 特点: 1.可以每隔M行插入N行,其中N和M可以自己指定 2.可以每隔M列插入N列,其中N和M可以自己指定 3.起始行或结束行或者起始列、结束列也可以自己指定 工具: 【区域定位工具】 功能: 可以基于用户指定的条件选择相应的单元格,弥补Excel的不足 特点: 1.对于数值,可以使用所有比较运算符查找数据Excel本身的定位不能定位于大于、小于某值的区域。 2.对于文本,可以定位于指定的字符,也可以定位于指定字符以外的所有字符。且支持通配符。 3.定位于可以指定区域,包括“选择区域”、“已用区域”和“可见区域”。这比Excel本身的查找更全面。 4.支持双条件查找,例如定位于从60到100的所有数据区域。或者不包括60到100的所有区域。 工具: 【根据工资计算钞票面额张数】 功能: 根据工资计算需要发工资时需要多少张100元、50元、20元、10元等等面额的钞票数量 特点: 1.可以选择一个区域进行操作,批量计算。 2.钞票的面额可以自己定义。 3.不仅计算每个人员需要的钞票张数,还对所有面额钞票汇总。 工具: 【建立工作表目录】 功能: 将当前工用簿中所有工作表建立目录,且产生链接 特点: 1.一键生成工作表目录。 2.单击目录中任意表名可以跳转至该工作表。 工具: 【建立文件目录】 功能: 将指定目录下所有文件建立目录于工作表中 特点: 1.可自由定义目标文件的路径。 2.允许选择目录是否产生链接。 3.可以对子目录中的文件建立目录,不管文件夹中有多少个子文件夹。 4.可以多次执行工具,从而将建立不同文件夹中的文件目录。程序自动将其分置于不同的列中。 工具: 【工作簿拆分】 功能: 将指定工作簿的每个工作表拆分成单独的工作簿 特点: 1.自由选定存放路径。 2.提是拆分后是否保留公式的选项。 3.可以自由定义参与拆分的工作表名 工具: 【工作表拆分】 功能: 将当前工作表的数据按条件拆分成多个工作表 特点: 1.可以自由选择条件所有列。 2.可以设定标题行数,标题不参与拆分。 3.可以自由定义折分条件。 4.可以选择折分成多工作表后是否保留原有公式。 工具: 【合并工作簿】 功能: 将多个具有相同格式的工作簿中所有工作表合并为一个工作簿的多工作表中,也可以将一个工作簿的所有工作表合并到一个工作表 特点: 1.多工作簿合并时,可以自由指定待合并工作簿的目录路径。 2.可以选择将多工作簿合并到同工作表还是同工作簿。 3.对于多个工作簿中具有同名工作表时,可以选择是否合并工作表。 4.进以定义参与合并的工作簿名。即所选文件夹中存在多工作簿,可以对部分执行合并。 5.如果仅对一个工作簿中的工作表进行合并,那么选择“多工作表合并”。 6.对工作表合并时,允许选择参与合并的工作表名。即既可全部参与合并也可以部分工作表参与合并。 7.合并前需要将当前工作簿保存。 工具: 【选区背景着色】 功能: 将选择区域或者选区所在行、列用醒目的颜色标识,便于查看 特点: 1.着色的对象有“选区”、“行”、“列”以及“行列”可选。 2.可选颜色包括6种。 3.可以随时启用、禁用着色功能。 4.程序具有记忆功能。即保存上次的设置。 工具: 【小写转大写】 功能: 将阿拉伯数字转换成人民币大写形式 特点: 1.可以批量操作。 2.可以同时选择多个区域再执行工具。 3.几百个单元格数据瞬间完成转换。 工具: 【大写转小写】 功能: 将人民币大写转换成阿拉伯数字 特点: 1.可以批量操作。 2.可以同时选择多个区域再执行工具。 3.几百个单元格数据瞬间完成转换。 工具: 【批量新建或复制工作表】 功能: 批量新建或者工作表 特点: 1.操作灵活:可以选择新建或者复制。 2.批量操作:可以一次性建立或者复制1到255个。 3.高速操作:建立或者复制255个工作表三秒钟不到即可完成。 4.方向自由:可以定义新表在当前表之前或者之后。 5.命名灵活:对于表名有规律的创建或者复制新表,可以选择“从单元格创建”。 工具: 【批量加解密】 功能: 对当前工作簿中所有工作表或者指定的部分工作表进行加、解密 特点: 1.可以灵活的指定加、解密工作表名。 2.对100个工作表加密或者解密不超过3秒钟。 3.本工个适用于多工作表使用相同密码保护,否则请手工操作。 4.其中解密是知道密码的前提下进行批量解密,而非绿色。 工具: 【生成工资条】 功能: 高效的工资条设计工具 特点: 1.瞬间将工资明细表生成工资条,方便打印并裁剪。 2.生成的工资与工资条之间有一个空行,供剪裁用。可以自定义其高度。 3.可以自己定义工资条头的行数,不同公司可能有不需要标题行。 4.只要类似工资条的信息都可以用本工具生成,例社保资料、成绩通知条等等。 工具: 【删除工资条】 功能: 删除前一工具生成的工资条头 特点: 1.可以由用户指定标题行数,使其适用面更广。 2.瞬间删除工资条标题信息,还原为明细表。 工具: 【反向选择】 功能: 对当前数据区域进行反向选择,即定位于未选择的区域 特点: 1.可以由用户指定标题行数,使其适用面更广。 2.瞬间删除工资条标题信息,还原为明细表。 备注:工具通用于Excel 2003和 EXCEL 2007 工具安装: 必须先解压,然后双击“安装.EXE" 如果需要删除工具,则双击“删除.EXE”

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值