`
xiaolin0199
  • 浏览: 573172 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

OpenERP对象定义属性

 
阅读更多

OpenERP对象定义的属性详细解说

例:

class name_of_the_object(osv.osv):
    _name = 'xxx'
    ......
name_of_the_object()

#Sample:
class qingjd(osv.osv):
    _name = 'qingjia.qingjd'
    _description = '请假单'
    _columns = {
        'shenqr': fields.many2one('hr.employee', '申请人', required=True),
    }
qingjd()

 

对象定义的完整属性如下:
[必须属性]
       _name: 对象的唯一标识符,必须是全局唯一。这个标识符用于存取对象,其格式通常是"ModuleName.ClassName",对应的,系统会字段创建数据库表"ModuleName_ClassName"。

       补: 当使用_inherit时可以与被继承的类的_name一致,_name一致表示不创建新的数据库表,而直接在原表上修改
       _columns: 定义对象的字段,系统会字段为这里定义的每个字段在数据库表中创建相应的字段。关于字段(Fields)的定义,参见后文

       补: OE并不一定为每个定义项创建数据库字段,比如:selection, reference, one2many, function等字段是不会有对应的数据库字段的。


[可选属性]
       _table: 待创建的数据库表名,缺省值是和_name一样,只是将"."替换成"_"。
       _description: 对象说明性文字,任意文字。
       _defaults: 定义字段的缺省值。当创建一条新记录(record or resource)时,记录中各字段的缺省值在此定义。

       补: 在V6中字典的值可以不是函数,就比如在V5中我们必须这样来定义:_defaults= { 'state' : lambda *a: 'draft'} 而在 V6中可以这样来:_defaults = {'state' : 'draft'}

      

_defaults属性用于定义字段的缺省值,其格式为:
_defaults:
    {
        'name_of_the_field':function, ...
    }

function的返回值作为'name_of_the_field'字段的缺省值。function格式是:function(obj, cr, uid, context),返回值必须是简单类型,如boolean, integer, string 等。下面是_defaults的例子。
_defaults = {
    'date_order': lambda *a: time.strftime('%Y−%m−%d'),
    'state': lambda *a: 'draft',
    'user_id': lambda obj, cr, uid, context: uid
}

lambda是Python的行函数,"lambda obj, cr, uid, context: uid"等同于下述函数:
def func(obj, cr, uid, context):
    return uid

 
       _order: 定义search()和read()方法的结果记录的排序规则,和SQL语句中的order 类似,缺省值是id,即按id升序排序。详细说明参见后文。

写道
_order在对象的search或read方法中的select语句上加上"Order"子句,如 _order = 'name desc, account_id',对应SQL文的Order子句:order by name desc, account_id。

 
       _rec_name: 标识record name的字段。缺省情况(name_get没被重载的话)方法name_get()返回本字段值。_rec_name通常用于记录的显示,例如,销售订 单中包含业务伙伴,当在销售订单上显示业务伙伴时,系统缺省的是显示业务伙伴记录的_rec_name。

       补: 缺省的情况下,name_get方法使用表中的‘name'字段,所以当你定义了一个实体类B,并且实体类B中即没有“name“字段也没有为  _rec_name特别指定一个字段,   那么当OE调用name_get方法时(比如实体类A有一个many2one字段b指向实体类B,显示A.b的值时就会调用类B的name_get方 法)  就会报“未定义name字段“的错误
       _auto: 是否自动创建对象对应的Table,缺省值为: True。当安装或升级模块时,OpenERP会自动在数据库中为模块中定义的每个对象创建相应的Table。当这个属性设为False 时,OpenERP不会自动创建Table,这通常表示数据库表已经存在。例如,当对象是从数据库视图(View)中读取数据时,通常设为False。

         补: 当_auto的值为“False"时,OE不会自动在数据库中创建相应的表,开发者可以在对应类的init()方法中定义表或视图的SQL。这一般应用 在  报表所对应的数据对象中,因为报表的数据对象往往是“视图”,所以我们可以在init()方法中创建所需的数据库视图SQL即可。
       _constraints: 定义于对象上的约束(constraints),通常是定义一个检查函数,关于约束的详细说明,参见后文。

写道
_constraints可以灵活定义OpenERP对象的约束条件,当创建或更新记录时,会触发该条件,如果条件不符合,则弹出错误信息,拒绝修改。
_constraints的定义格式:
[(method, 'error message', list_of_field_names), ...]

· method: 是对象的方法,该方法的格式为:def _name_of_the_method(self, cr, uid, ids): −> True|False
· error message: 不符合检查条件(method返回False)时的错误信息。
· list_of_field_names: 字段名列表,这些字段的值会出现在error message中。通常列出能帮助用户理解错误的字段。

    例:

   

def _constraint_sum(self, cr, uid, ids):
    cr.execute('SELECT a.currency_id
        FROM account_move m, account_move_line l, account_account a
        WHERE m.id=l.move_id AND l.account_id=a.id AND m.id IN ('+','.join(map(str, ids))+')
        GROUP BY a.currency_id')
    if len(cr.fetchall()) >= 2:
        return True
    cr.execute('SELECT abs(SUM(l.amount))
        FROM account_move m LEFT JOIN account_move_line l ON (m.id=l.move_id)
        WHERE m.id IN ('+','.join(map(str, ids))+')')
    res = cr.fetchone()[0]
    return res < 0.01

_constraints = [
    (_constraint_sum, 'Error: the sum of all amounts should be zero.', ['name'])
    ]

 
       _sql_constraints: 定义于对象上的约束(constraints),和SQL文中的约束类似,关于约束的详细说明,参见后文。

写道
_sql_constraints定义数据表的约束条件,其格式如下例所示。
_sql_constraints = [
('code_company_uniq', 'unique (code,company_id)', 'The code of the account must be unique per company !')
]
本例的_sql_constraints会在数据表中增加下述约束:
CONSTRAINT ObjectName_code_company_uniq UNIQUE(code, company_id)

 
       _inherit:
       _inherits: _inherits和_inherit都用于对象的继承,详细说明参见后文。

       补: 另外还可以这样理解_inherits,_inherits又被称为实例继承,就是新继承的数据对象不但继承被继承对象的属性和方法同时也继承了数据实  例,即表中的记录。比如product类不但继承product_template的属性和方法,而且这两个表的数据也是同步的。

写道
_inherit继承有两种情况,1)如果子类中不定义_name属性,则相当于在父类中增加一些字段和方法,并不创建新对象。2)如果子类中定义_name属性,则创建一个新对象,新对象拥有老对象的所有字段和方法,老对象不受任何影响。两种情况的示例及继承关系的图示见下面。

 

 
 

   class res_partner_add_langs(osv.osv):
       _inherit = 'res.partner'
       _columns = {
           'lang_ids' : fields.many2many('res.lang', 'res_lang_partner_rel', 'partner_id', 'lang_id', 'Languages'),
       }
   res_partner_add_langs()

 

 

   class formateur(osv.osv):
       _name = 'formateur'
       _inherit = 'res.partner'
       _columns = {
           'lang_ids' : fields.many2many('res.lang', 'res_lang_partner_rel', 'partner_id', 'lang_id', 'Languages'),
       }
   formateur()

  _inherits相当于多重继承。子类通过_inherits中定义的字段和各个父类关联,子类不拥有父类的字段,但可以直接操作父类的所有字段和方法。_inherits的示例及图示见下图。



 

   class cursus_category(osv.osv):
       _name = 'cursus.category'
       _inherits = {'account.analytic.caccount':'analytic_caccount_id'}
       _columns = {
           'analytic_caccount_id' : fields.many2one('account.analytic.caccount', 'ID'),
       }
   cursus_category()

 

  • 大小: 11.7 KB
  • 大小: 15.5 KB
  • 大小: 31.1 KB
分享到:
评论

相关推荐

    OPENERP 产品定制属性代码分析

    OPENERP 产品定制属性分析, OPENERP是用的PYTHON开发的,其源码当然是PYTHON

    openerp.zip_openERP

    2. 数据模型:OpenERP通过定义对象来构建数据模型,每个对象代表一类实体,如客户、产品等。对象包含字段,字段定义了对象的数据结构。 3. 视图:视图是用户界面的表现形式,包括树状视图、列表视图、表单视图等,...

    openERP 7.0使用手册 第三章 OpenERP快速入门

    OpenERP 7.0 使用手册第三章 OpenERP 快速入门 OpenERP 是一种开源的企业资源计划(ERP)软件,它可以帮助企业管理其业务操作,包括销售、采购、库存、财务等。下面是 OpenERP 7.0 使用手册第三章 OpenERP 快速入门...

    OpenERP开发基础教程

    OpenERP应用和开发基础,主要讲述OPENERP的系统架构以及基本知识,还有开发的一些基本语法等,非常适合入门者使用。

    OpenERP 文档

    - 可以通过 CSS 来改变元素的颜色、字体等属性。 - 在 OpenERP Web 中,可以利用 CSS 来定制模块的视觉效果。 #### 二、高级主题 **2.1 API 变更** - **从 OpenERP Web 6.1 到 7.0**: - 版本之间的 API 变更...

    openerp教程

    openerp教程

    OpenERP.rar_openERP

    XML是定义界面布局和业务逻辑的主要语言,而JavaScript则用于前端交互的增强。 OpenERP的模型-视图-控制器(MVC)架构是其设计的基础。模型处理数据和业务逻辑,视图负责用户界面展示,控制器则作为两者之间的桥梁...

    OpenERP应用和开发基础文档及相关资源

    OpenERP应用和开发基础 OpenERP应用和开发基础(第一章).pdf OpenERP应用和开发基础(第二章).pdf OpenERP应用和开发基础(第三章).pdf OpenERP应用和开发基础(第四章).pdf OpenERP应用和开发基础(第五章).pdf OpenERP...

    openerp应用和开发

    OpenERP应用和开发基础,随着openerp的发展,越来越多的中小企业开始应用此erp系统,免费开源是最大的特点

    OpenERP Installing Ubuntu9.04

    OpenERP Installing Ubuntu9.04

    openerp 免费下载

    OpenERP是一款优秀的开源ERP软件。开源是说,软件完全公开,您不仅可以自由下载软件,还可以自由下载软件的所有源代码;软件本身没有任何秘密, 没有任何用户数限制,没有任何收费!优秀是说,软件功能丰富,品质...

    openerp部署训练文档

    以上就是Openerp部署训练文档的主要内容,涵盖了OpenERP的安装、模块构建、视图构建、对象间关系、继承、域和功能字段、高级视图、基于组的访问控制机制、向导对象、工作流、安全性、国际化、报告、仪表板、网络服务...

    openerp 培训班 模块代码

    每个模型都继承自` openerp.osv.osv.Model`,并定义字段、方法以及与其他模型的关系。 ```python from openerp.osv import osv, fields class my_model(osv.Model): _name = 'my.model' _columns = { 'field1...

    OpenERP操作指南

    OpenERP操作指南

    使用虚拟机VM运行Linux版OpenERP

    OpenERP、Linux版、虚拟机VM、如何使用虚拟机VM运行Linux版OpenERP

    openerp 7.0 allinone part2

    openerp 7.0 allinone 安装包part1

    OpenERP_Technical开发教程

    OpenERP提供了完整的工具箱,包括集成的对象关系映射(ORM)支持、模板驱动的模型视图控制器(MVC)接口、报表生成系统、自动化国际化等特性。 #### Python与RAD框架 Python是一种高级动态编程语言,非常适合快速...

    OpenERP应用和开发基础

    OpenERP应用和开发基础OpenERP应用和开发基础

    OpenERP_6.1_web框架指南

    OpenERP_6.1_web框架指南

    Taobao OpenERP Connector.zip

    Taobao OpenERP Connector ,Taobao OpenERP Connector功能:接受淘宝主动通知,自动添加、确认订单、发货等。...

Global site tag (gtag.js) - Google Analytics