在 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?的主要内容,如果未能解决你的问题,请参考以下文章