Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

[已解决]odoo10 继承并扩展底层模块问题



  • 继承odoo自带的res.partner,我想添加一些自定义字段,比如currency_id

    现在的问题是,我每次新增字段,然后在别的model中引用,就会报错字段res.partner.currency_id找不到,

    目前的解决方法都要重新建数据库才能行,有没有比较方便的方法不用新建数据库的,还是我写的时候忽略什么问题了?



  • [转载]

    针对继承的模块而言:
    res.partner模型属于底层模型,当服务启动时候,就会加载模型数据结构;因此,当自定义了一个新模块res.partner(或者说继承该模型),扩展了字段,没问题,可以正常安装,也可以正常使用!

    但是,但是!如果该新模块res.partner使用了一段时间后,假如你还想在该模块res.partner基础上继续扩展字段!
    对不起,这个时候,扩展后,重启odoo服务会报错,提示相关附件,找不到你扩展的那个字段。

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

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

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

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



  • 这是有办法解决的,方法如下:
    1.在应用中,打开扩展模块。就是能看到升级/卸载的地方
    2.将代码更新到最新
    3.重启odoo服务
    4.点升级。特别注意,第一件事是,必须点升级,千万别干别的。
    如果已经干了别的,可先注销对应的xml中,所有用到添加字段的地方,或者干脆注销整个文件。

    如果是本地开发,可先添加字段,重启odoo后升级,再添加xml文件。



  • @eric2017

    问题:
    1、上述的方法在进行第1,2步的时候,新增的字段实际上没有更新的,3,4步的时候还是报错提示字段不存在的。

    ps:已经更新到服务器上的是不行的了吧。

    2、自定义的模块,重启了odoo服务,但是在更新前,还是能点到升级/卸载模块的地方的(升级的时候才能更新数据库跟视图的),但是官方的底层模板odoo服务重启后就不行的,中间感觉有个时间差别,没懂搞是什么?


  • 管理员

    这边有一个我以前的回答,供你参考:

    http://odoo.net.cn/post/22631



  • @digitalsatori
    首先感谢您,不过我的第二个问题感觉还是有疑惑的。

    首先:security文件改变read, write,create,unlink的权限也是需要更新模板,不需要重启odoo服务的?

    在这里记录下对我有用的:
    改变py文件需要重启服务器没错,还需Upgrade。
    总结:应该是涉及数据库结构或内容改变需要更新模块。改xml涉及改变数据库内容,所以需要更新模块。

    比如:而改变实体类的字段属性,既改变了py文件又改变了数据库结构,所以需要重启服务器,同时更新模块。
    卸载了重装相当于重启服务器+更新模块