odoo总结---类继承和视图继承
类继承
自从有了类,就有继承,继承是类最大的特性,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属性,它允许一个模型以透明的方式包含其他模型。通过字典映射继承模型与字段的关系,并关联它们。(相当于成员变量:引用一个外部的类对象赋值给这个模型的一个成员,但是对象的值是保存在被引用的类的数据库表中的。但是在当前类通过成员修改了变量值的,则会同步到被引用的类的数据库表中)
优点是不需要在几个表之间重复数据结构,例如地址。 任何需要包含地址的新模型都可以将其委派给嵌入式合作伙伴模型。 如果在合作伙伴地址字段中引入了修改,则这些修改会立即提供给嵌入它的所有模型!
视图继承
1 定位新的字段插入的位置使用xpath进行定位,定位形式,很多
<xpath expr="//field[@name="已有字段 "]" position="具体位置" before ,after,attributes,"inside"
1.1 before 在expr 匹配的元素前加同级内容
<xpath>
<xpath expr="//field[@name='work_location']" position="before">
<field name="city_id"/>
</xpath>
1.2 after 在expr匹配元素后加同级内容
<xpath expr="//field[@name='work_location']" position="after">
<field name="work_nature"/>
<xpath>
1.3 attributes :使用attribute 标签对expr 匹配的元素属性进行修改
name = fields.Char(string="Name", copy=False) # 流水号 _sql_constraints = [('dec_name_uniq', 'unique(name)', 'error message dec name uniq')] <xpath expr="//field[@name='work_location']" position='attributes'> < attribute name="invisible">1</attribute> </xpath>
#补充内容举例 可以在通过attributes 字段的属性,比如修改string,options,doamin, domian必须第一个条件西夏数值类型,
<xpath expr="//field[@name='department_id']" position="attributes"> <attribute name="string">设置主部门</attribute> <attribute name="options">{'no_open':True,'no_create':True}</attribute> <attribute name="domain">{'id','in',department_ids}</attribute>
-
3 attibutes:对于字段继承
<record id="payment_sale_order_partial_reconcile_view_extend" model="ir.ui.view"> <field name="name">payment.sale.order.partial.inherit.reconcile_list</field> <field name="model">payment.sale.order.partial.reconcile</field> <field name="inherit_id" ref="kg_account.payment_sale_order_partial_reconcile_view_list"/> <field name="arch" type="xml"> <xpath expr="//field[@name='centralized']" position="before"> <field name="card_state"/> </xpath> <xpath expr="//button[@name='%(kg_account.payment_disclaim_action)d']" position="attributes"> <attribute name="invisible"></attribute> <attribute name="attrs">{'invisible':['|','|',('amount_effective', '=', 0),('is_self', '!=', True), '&',('centralized','=',True),('card_state','!=','draft')]}</attribute> </xpath> <!-- <xpath expr="//button[@name='%(kg_account.payment_disclaim_action)d']" position="replace">--> <!-- <button name="%(kg_account.payment_disclaim_action)d" string="反认领" type="action"--> <!-- context="{'default_order_line_id': order_line_id, 'return_back': True}"--> <!-- attrs="{'invisible':['|','|',('amount_effective', '=', 0),('is_self', '!=', True),--> <!-- '&',('centralized','=',True),('card_state','!=','draft')]}"/>--> <!-- </xpath>--> </field> </record> </data>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示