类继承
自从有了类,就有继承,继承是类最大的特性,ODOO开发有不例外,先ODOO集采总结如下:
1)类继承:扩展类中没有_name属性,因为它继承了父类的_name。对现有模型的扩展, 添加新功能,都将添加到现有模型中,不会创建新模型。 因此,在odoo中,根据_name唯一确定这个模型时找到的就是扩展后的类。
举例:
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
_sort = 'name'
_rec_name = 'order_id'
2)原型继承:我们想使用具有不同于父模型的值的_name属性,我们将获得一个新模型重用来自继承的特性,但是具有自己的数据库表和数据。其实就是把继承的类的功能特性拷贝衣服给新的模型使用,并不改变被继承模型。
复制意味着被继承的方法和字段也将在继承模型中可用。 对于字段,这意味着它们也将被创建并存储在目标模型的数据库表中。 原始(继承)和新(继承)模型的数据记录保持不相关。 只有定义是共享的。
举例说明:
class SaleOrderLine(models.Model):
_name = 'sale.order.line'
_inherit = 'sale.order.line'
3)代理继承(委托继承):使用_inherits属性,它允许一个模型以透明的方式包含其他模型。通过字典映射继承模型与字段的关系,并关联它们。(相当于成员变量:引用一个外部的类对象赋值给这个模型的一个成员,但是对象的值是保存在被引用的类的数据库表中的。但是在当前类通过成员修改了变量值的,则会同步到被引用的类的数据库表中)
优点是不需要在几个表之间重复数据结构,例如地址。 任何需要包含地址的新模型都可以将其委派给嵌入式合作伙伴模型。 如果在合作伙伴地址字段中引入了修改,则这些修改会立即提供给嵌入它的所有模型!
视图继承
格式:
通过 name='inherit_id' ref=' hr.view_employee_form' 继承外部id是hr.view_employee_form 完成集采;
<xpath expr="//field[@name="已有字段 "]" position="具体位置" before ,after,attributes,"inside"
1.2 after 在expr匹配元素后加同级内容
1.3 attributes :使用attribute 标签对expr 匹配的元素属性进行修改
name = fields.Char(string="Name", copy=False) # 流水号
\_sql\_constraints = \[('dec\_name\_uniq', 'unique(name)', 'error message dec name uniq')\]
#补充内容举例 可以在通过attributes 字段的属性,比如修改string,options,doamin, domian必须第一个条件西夏数值类型,
手机扫一扫
移动阅读更方便
你可能感兴趣的文章