odoo模型继承类型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
odoo模型继承类型
Odoo是一个开源的企业管理软件,支持模块化开发和高度定制化。
其中,模型继承是Odoo中常用的一种定制化方法。
模型继承可以用于扩展一个模型的字段、方法和视图等,以满足不同的业务需求。
Odoo中的模型继承有三种类型:继承、修改和代理。
下面将分别介绍它们的使用方法和注意事项。
1. 继承
继承是Odoo中最常见、最简单的模型定制方法。
继承通常用于向现有模型添加新字段或修改现有字段的默认值。
继承使用的关键字是_inherit,如:
class SaleOrder(models.Model):
_inherit = 'sale.order'
new_field = fields.Char(string='New Field')
在上面的示例中,我们向销售订单模型添加了一个名为
“new_field”的新字段。
该字段的类型为Char(字符串),标签为“New Field”。
使用继承时,需要注意以下事项:
- 继承的模型必须已经存在,并且其名称必须与继承中的名称相同。
- 继承和被继承的模型必须在同一个模块中定义。
- 如果要修改继承的字段的默认值,可以使用默认值字典
(_defaults),如:
class SaleOrder(models.Model):
_inherit = 'sale.order'
_defaults = {
'new_field': 'default value'
}
默认值字典中的键是要修改的字段名,值是要设置的默认值。
2. 修改
修改是一种更为灵活的模型定制方法,它可以修改继承的字段的类型、标签、帮助文本等属性,也可以添加新的方法和修改现有方法。
修改使用的关键字是_overwrite或_redefine,如:
class SaleOrder(models.Model):
_inherit = 'sale.order'
@api.model
def _prepare_invoice(self):
res = super(SaleOrder, self)._prepare_invoice()
res['new_field'] = self.new_field
return res
@api.depends('new_field')
def _compute_new_field(self):
for record in self:
record.new_field_upper = record.new_field.upper()
new_field = fields.Char(string='New Field', help='New Field Help Text')
new_field_upper = fields.Char(string='New Field Upper', compute='_compute_new_field')
def action_confirm(self):
res = super(SaleOrder, self).action_confirm()
# add some custom logic here
return res
在上面的示例中,我们修改了销售订单模型的_prepare_invoice 方法,将其返回值中添加了一个新的字段值。
我们还添加了一个新的计算字段“new_field_upper”,用于显示“new_field”的大写形式。
最后,我们重写了销售订单模型的action_confirm方法,添加了一些自定义的逻辑。
使用修改时,需要注意以下事项:
- 修改可以用于修改继承的字段的所有属性,包括标签、帮助文本、默认值等。
- 修改可以用于添加新的方法和修改现有方法。
- 如果要调用被修改的方法,可以使用super()方法。
3. 代理
代理是一种特殊的继承类型,用于将一个模型的所有方法和属性“代理”到另一个模型中。
代理使用的关键字是_proxy,如:
class SaleOrderProxy(models.Model):
_name = 'sale.order.proxy'
_description = 'Sale Order Proxy'
_inherit = 'sale.order'
def my_custom_method(self):
# add some custom logic here
pass
在上面的示例中,我们创建了一个名为“sale.order.proxy”的新模型,并将其设置为继承自“sale.order”模型,并且使用了_proxy 关键字。
这意味着“sale.order.proxy”模型将继承所有“sale.order”模型的方法和属性,并且可以添加自己的方法。
使用代理时,需要注意以下事项:
- 代理模型必须使用_name属性来定义自己的名称。
- 代理模型必须使用_inherit属性来指定要代理的模型名称。
- 代理模型可以添加自己的方法和属性,并且可以重写被代理模型的方法和属性。
- 代理模型不能添加新的字段。
总结
Odoo中的模型继承有三种类型:继承、修改和代理。
继承通常
用于向现有模型添加新字段或修改现有字段的默认值;修改可以用于修改继承的字段的所有属性,包括标签、帮助文本、默认值等,还可以添加新的方法和修改现有方法;代理是一种特殊的继承类型,用于将一个模型的所有方法和属性“代理”到另一个模型中。
使用不同类型的继承可以满足不同的业务需求,但需要遵循相应的使用规则。