odoo开发笔记 -- 附件上传

Posted Jesson

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了odoo开发笔记 -- 附件上传相关的知识,希望对你有一定的参考价值。

附件上传基本原理实现,可以参考这篇:

https://www.cnblogs.com/ljwTiey/p/7348291.html

http://blog.csdn.net/wangnan537/article/details/41903159

 

首先我们看一下odoo界面默认的附件功能,有木有感觉不是很友好!囧 :)

下面给小伙伴们介绍另一种odoo自带的附件管理方式!

首先,在你的模型中增加如下定义:

    ###############################################################################################################
    # 增加附件上传功能
    attachment_number = fields.Integer(compute=\'_compute_attachment_number\', string=\'Number of Attachments\')
    @api.multi
    def _compute_attachment_number(self):
        """附件上传"""
        attachment_data = self.env[\'ir.attachment\'].read_group([(\'res_model\', \'=\', \'替换成你的模型名\'), (\'res_id\', \'in\', self.ids)], [\'res_id\'], [\'res_id\'])
        attachment = dict((data[\'res_id\'], data[\'res_id_count\']) for data in attachment_data)
        for expense in self:
            expense.attachment_number = attachment.get(expense.id, 0)

    @api.multi
    def action_get_attachment_view(self):
        """附件上传动作视图"""
        self.ensure_one()
        res = self.env[\'ir.actions.act_window\'].for_xml_id(\'base\', \'action_attachment\')
        res[\'domain\'] = [(\'res_model\', \'=\', \'替换成你的模型名\'), (\'res_id\', \'in\', self.ids)]
        res[\'context\'] = {\'default_res_model\': \'替换成你的模型名\', \'default_res_id\': self.id}
        return res
    #############################################################################################

前端view视图增加如下代码:

<div class="oe_button_box" name="button_box">
    <button name="action_get_attachment_view" class="oe_stat_button" icon="fa-book" type="object">
        <field name="attachment_number" widget="statinfo" string="附件上传"/>
    </button>
</div>

实现效果:

注意上方这个上传界面,odoo做了权限配置,在开发者模式下,和普通模式下,显示的界面是不同的。

激活开发者模式,该界面显示效果:

这里其实是在视图view前端代码字段中增加了如下设置:

小伙伴们试试吧!!!

ps: 另外,注意一下,odoo附件模型属于底层模型,当服务启动时候,就会加载附件模型数据结构;因此,当你自定义了一个新模块A,扩展了附件的字段,没问题,可以正常安装,也可以正常使用!

但是,但是!如果该新模块A使用了一段时间后,假如你还想在该模块A基础上继续扩展附件字段!

对不起,这个时候,扩展后,重启odoo服务会报错,提示相关附件,找不到你扩展的那个字段。

就是由于,服务启动的时候,附件模型py数据结构文件就会被加载,但是真正的此时数据库中还没有生成相应的字段,所以会报错。

而我们自己开发的模块在模型字段扩展后,为什么没有这个问题呢?

这是因为,我们普通模块模型修改后,同样在odoo服务重启后,模型py文件会被加载,但是,我们可以进入应用列表,找到该模块,点击升级,数据库中就会生成新的表结构。

结论:我们在扩展odoo底层自带模块模型字段的时候,要么一次定义好,要么使用一段时间后还想扩展,那么可以重新编写个单独的模块来扩展。

 

以上是关于odoo开发笔记 -- 附件上传的主要内容,如果未能解决你的问题,请参考以下文章

pycharm添加Odoo代码片段

odoo开发笔记 -- 错误警告提示确认信息显示

odoo开发笔记 -- 数据库备份策略

odoo开发笔记--向导弹窗的selection选项,根据条件动态显示

odoo开发笔记 -- 安装Backend debranding去除odoo信息模块后 隐藏开发者模式

EBS开发附件上传和下载功能(转)