关注各种黑科技
B站UP主,编程教学,游戏玩家,挂B,金牛座

Odoo模型继承

模型继承   在odoo中有2种模型的继承机制 左边是传统方式 能够添加字段 改写字段定义 添加约束 添加或改写方法 共有两种写法   第一种 经典继承 #_name = model1 _inherit = model1 不会创建的模型,直接修改模型定义,数据库中没有新的表生成。 例子 注意官网文档例子好像和原型继承写反了 class Extension0(models.Model): _name = 'extension.0' name = fields.Char(default="A") class Extension1(models.Model): _name = 'extension.0'# 相同可以省略不写 _inherit = 'extension.0' description = fields.Char(default="Extended") 第二种 原型继承 _name = model2 _inherit = model1 相当于把模型1的属性(字段 方法等)copy了一份,重新创建一个新的模型,新的表里有模型1的字段。 例子 class Inheritance0(models.Model): _name = 'inheritance.0' name = fields.Char() def call(self): return self.check("model 0") def check(self, s): return "This is {} record {}".format(s, self.name) class Inheritance1(models.Model): _name = 'inheritance.1' _inherit = 'inheritance.0' def call(self): return self.check("model 1") 右边是委托继承 class NewModel(): _name = "new.model" _inherits = { '子模型1': '关联字段1', '子模型2': '关联字段2', } 支持多重继承,并提供透明的子模型字段访问方法,好像模型有子模型字段 例子 class Child0(models.Model): _name = 'delegation.child0' field_0 = fields.Integer() class Child1(models.Model): _name = 'delegation.child1' field_1 = fields.Integer() class Delegating(models.Model): _name = 'delegation.parent' _inherits = { 'delegation.child0': 'child0_id', 'delegation.child1': 'child1_id', } child0_id = fields.Many2one('delegation.child0', required=True, ondelete='cascade') child1_id = fields.Many2one('delegation.child1', required=True, ondelete='cascade') 这种继承只能继承字段,其他方法不继承 可以读写子模型的字段 record.field_1 record.field_2 record.write({'field_1': 4}) 如果子模型里的字段重复,只能看到_inherits第一个子模型的字段   注意 继承的模型所在addon需要在本addon里添加依赖,不然会报一个Key Error错误。 比如你在你自己的模块中继承了account模块中的account.tax模型
class AccountTaxPython(models.Model):
    _inherit = "account.tax"
需要添加依赖 odoo8-9 __openerp__.py odoo10 __manifest__.py
'depends': ['account'],
base模块里的模型继承不用添加depends,因为所有模块默认都依赖于base   使用odoo shell测试 安装odoo8.0的shell https://www.odoo.com/apps/modules/8.0/shell/ 提交数据 self.env.cr.commit() self.env['model'].search([])   参考 https://www.odoo.com/documentation/8.0/howtos/backend.html#model-inheritance https://www.odoo.com/documentation/8.0/reference/orm.html#reference-orm-inheritance
转载请注明出处
分享到: 更多 (0)

评论 0