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'
View Code

 

3)代理继承(委托继承):使用_inherits属性,它允许一个模型以透明的方式包含其他模型。通过字典映射继承模型与字段的关系,并关联它们。(相当于成员变量:引用一个外部的类对象赋值给这个模型的一个成员,但是对象的值是保存在被引用的类的数据库表中的。但是在当前类通过成员修改了变量值的,则会同步到被引用的类的数据库表中)

优点是不需要在几个表之间重复数据结构,例如地址。 任何需要包含地址的新模型都可以将其委派给嵌入式合作伙伴模型。 如果在合作伙伴地址字段中引入了修改,则这些修改会立即提供给嵌入它的所有模型!

视图继承

格式:<field name="inherit_id" ref="hr.view_employee_form"/>

通过 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 匹配的元素前加同级内容
 <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>

 

  1. 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),
                 '&amp;',('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),-->
 <!--               '&amp;',('centralized','=',True),('card_state','!=','draft')]}"/>-->
 <!--            </xpath>-->
           </field>
     </record>
   </data>
 
 

 

 

posted @ 2022-08-10 18:05  dayu2020  阅读(411)  评论(0编辑  收藏  举报