在 Odoo 中,如何在 ir_attachment 类中覆盖 _file_write?

Posted

技术标签:

【中文标题】在 Odoo 中,如何在 ir_attachment 类中覆盖 _file_write?【英文标题】:In Odoo, how do I override _file_write in the ir_attachment class? 【发布时间】:2018-09-30 13:18:33 【问题描述】:

在 Odoo 9 源代码中,类 ir_attachment 有以下注释:

“数据”功能字段(_data_get,data_set)是使用实现的 _file_read、_file_write 和 _file_delete 可以被覆盖 实现其他存储引擎,此类方法应检查其他 位置伪 uri(例如:hdfs://hadoppserver)

它告诉我可以覆盖读取、写入和删除方法,但我无法找到任何有关如何执行此操作的文档。

我尝试通过使用以下代码创建一个模块来像其他 Odoo 模块一样覆盖:

class Attachments(osv.osv):
    _inherit = 'ir.attachment'

    def _file_read(self, cr, uid, fname, bin_size=False):
        r = super(Attachments, self)._file_read(cr, uid, fname, bin_size)
        return r

    def _file_write(self, cr, uid, value, checksum):
        name = super(Attachments, self)._filewrite(self, cr, uid, value, checksum):
        return fname

但是,我设置了几个断点,看起来 Odoo 没有注册这些函数覆盖。是否有其他方法可以覆盖运行时目录中的方法?

【问题讨论】:

你试过用_inherit = 'ir.attachment'代替_name = ....吗? @travisw:哇!很好地抓住了我的错误。我更新了代码和文本,以专注于我原来的问题。 您的文件是否正确导入?比如你的__init__ 文件正在调用你的Attachments 类进入Odoo。如果是这样,也许您可​​以尝试在ir.attachment 模型中添加一个字段,看看它是否成功添加到数据库模型中。如果可行,您可以尝试从 Odoo 的 10.0 代码中镜像 ir.attachment 方法。它使用models.Model(而不是osv.osv)和@api.model,这可能更容易继承。 @travisw:我错过了在 init.py 中导入模型。我最初有它,但是在尝试调试以前的错误时,我移动了一些东西。 Odoo 现在正在访问我的覆盖代码。感谢您的帮助。 【参考方案1】:

请参阅此 github 项目以获取完整且有效的示例:https://github.com/tvanesse/odoo-s3

【讨论】:

以上是关于在 Odoo 中,如何在 ir_attachment 类中覆盖 _file_write?的主要内容,如果未能解决你的问题,请参考以下文章

如何在odoo POS中更改厨房订单内容

如何在 Odoo 14 中隐藏过滤器

如何在 ODOO-14 中激活开发者模式.....?

如何在多个网站 Odoo 之一中显示我的模块?

如何在 Python 中使用多级字典创建 Odoo 记录

如何在odoo 14的打印菜单中隐藏报告?