This is the documentation for older versions of Odoo (formerly OpenERP).

See the new Odoo user documentation.

See the new Odoo technical documentation.

继承

传统的继承

简介

对象可能继承于很多定制的或是特定的模块。这比继承一个对象增加或修改某方面更好。

It is done with:

_inherit='object.name'

对象的扩展

这里继承有两种方式:他们都产生一个新的数据类,它将父类的字段和行为做为自己额外的字段和行为,但是他们在heavy programatical consequences上不同。

例子1中产生一个新的子类叫“custom_material”,当操作network.material的视图或是列表时可以看到或是使用它。这和例子2不同。

这是由于这个新类操作的表格(other.material)是不能被之前的对象“network.material”的视图或列表所识别的。

例子1:

class custom_material(osv.osv):
        _name = 'network.material'
        _inherit = 'network.material'
        _columns = {
                'manuf_warranty': fields.boolean('Manufacturer warranty?'),
        }
        _defaults = {
                'manuf_warranty': lambda *a: False,
       }
custom_material()

小技巧

Notice

_name == _inherit

这个例子,“custom_material”增加了一个新的字段“manuf_warranty”到对象“network.material”中。这个类的新的实例对运行在父类“network.material”上的视图或列表是可见的。

在面向对象的设计中,这种继承通常称为“类继承(class inheritance)”。子类继承父类的字段和函数。

例子2:

class other_material(osv.osv):
        _name = 'other.material'
        _inherit = 'network.material'
        _columns = {
                'manuf_warranty': fields.boolean('Manufacturer warranty?'),
        }
        _defaults = {
                'manuf_warranty': lambda *a: False,
       }
other_material()

小技巧

Notice

_name != _inherit

在这个例子中,“other_material”会继承“network.material”的所有字段,它另外会加入一个新的字段“manuf_warranty”。所有这些字段都在表格“other.material”中。这个类的新的实例对运行在父类“network.material”上的视图或列表是不可见的。

这种类型的继承被称为“原型继承(inheritance by prototyping)”。因为新创建的子类拷贝了父类的所有字段。子类继承父类的字段和方法。

Inheritance by Delegation

Syntax ::

class tiny_object(osv.osv)
    _name = 'tiny.object'
    _table = 'tiny_object'
    _inherits = { 'tiny.object_a' : 'name_col_a', 'tiny.object_b' : 'name_col_b',
               ..., 'tiny.object_n' : 'name_col_n' }
    (...)

对象“tiny.object”继承n个对象“tiny.object_a, ...,tiny.object_n”的所有的字段和方法。

To inherit from multiple tables, the technique consists in adding one column to the table tiny_object per inherited object. This column will store a foreign key (an id from another table). The values 'name_col_a' 'name_col_b' ... 'name_col_n' are of type string and determine the title of the columns in which the foreign keys from 'tiny.object_a', ..., 'tiny.object_n' are stored.

This inheritance mechanism is usually called " instance inheritance " or " value inheritance ". A resource (instance) has the VALUES of its parents.