odoo总结---类继承和视图继承
阅读原文时间:2023年08月10日阅读:1

类继承

自从有了类,就有继承,继承是类最大的特性,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 完成集采;

1 定位新的字段插入的位置使用xpath进行定位,定位形式,很多

<xpath expr="//field[@name="已有字段 "]" position="具体位置" before ,after,attributes,"inside"

1.1 before 在expr 匹配的元素前加同级内容

                                     

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')\]  

< attribute name="invisible">1

 #补充内容举例 可以在通过attributes 字段的属性,比如修改string,options,doamin, domian必须第一个条件西夏数值类型,
 


设置主部门
{'no_open':True,'no_create':True}
{'id','in',department_ids}

  1. 3 attibutes:对于字段继承


payment.sale.order.partial.inherit.reconcile_list
payment.sale.order.partial.reconcile



{'invisible':['|','|',('amount_effective', '=', 0),('is_self', '!=', True), '&',('centralized','=',True),('card_state','!=','draft')]}




手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章