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

OpenERP对象字段定义的详细解说

 
阅读更多

OpenERP对象支持的字段类型有:

 

基础类型:char, text, boolean, integer, float, date, time, datetime, binary;

写道
char: 字符型,size属性定义字符串长度。
text: 文本型,没有长度限制。
boolean: 布尔型(true, false)
integer: 整数。
float: 浮点型,如 'rate' : fields.float('Relative Change rate',digits=(12,6)), digits定义整数部分和小数部分的位数。
date: 日期型
time: 时间型
datetime: 日期时间型
binary: 二进制型

 

复杂类型:selection, function, related, reference;

selection

selection: 下拉框字段。定义一个下拉框,允许用户选择值。如:'state': fields.selection((('n','Unconfirmed'),('c','Confirmed')),'State', required=True),这表示state字段有两个选项('n','Unconfirmed')和('c','Confirmed')。

 function

#函数型,该类型的字段,字段值由函数计算而得,不存储在数据表中。其定义格式为:
fields.function(fnct, arg=None, fnct_inv=None, fnct_inv_arg=None, type='float', fnct_search=None, obj=None, method=False, store=True)

#· type 是函数返回值的类型。
#· method 为True表示本字段的函数是对象的一个方法,为False表示是全局函数,不是对象的方法。如果method=True,obj指定method的对象。
#· fcnt 是函数或方法,用于计算字段值。如果method = true, 表示fcnt是对象的方法,其格式如下:def fnct(self, cr, uid, ids, field_name, args, context),否则,其格式如下:def fnct(cr, table, ids, field_name, args, context)。ids是系统传进来的当前存取的record id。field_name是本字段名,当一个函数用于多个函数字段类型时,本参数可区分字段。args是'arg=None'传进来的参数。
#· fcnt_inv 是用于写本字段的函数或方法。如果method = true, 其格式是:def fcnt_inv(self, cr, uid, ids, field_name, field_value, args, context),否则格式为:def fcnt_inv(cr, table, ids, field_name, field_value, args, context)
#· fcnt_search 定义该字段的搜索行为。如果method = true, 其格式为:def fcnt_search(self, cr, uid, obj, field_name, args),否则格式为:def fcnt_search(cr, uid, obj, field_name, args)
#· store 表示是否希望在数据库中存储本字段值,缺省值为False。不过store还有一个增强形式,格式为 store={'object_name':(function_name,['field_name1','field_name2'],priority)} ,其含义是,如果对象'object_name'的字段['field_name1','field_name2']发生任何改变,系统将调用函数function_name,函数的返回结果将作为参数(arg)传送给本字段的主函数,即fnct。

 related

 

#关联字段,表示本字段引用关联表中的某字段。
格式为:fields.related(关系字段,引用字段,type, relation, string, ...),关系字段是本对象的某字段(通常是one2many or many2many),引用字段是通过关系字段关联的数据表的字段,type是引用字段的类型,

如果type是many2one or many2many, relation指明关联表。例子如下:
        'address': fields.one2many('res.partner.address', 'partner_id', 'Contacts'),
        'city':fields.related('address','city',type='char', string='City'),
        'country':fields.related('address','country_id',type='many2one', relation='res.country', string='Country'),

这里,city引用address的city字段,country引用address的country对象。在address的关联对象res.partner.address中,country_id是many2one类型的字段,所以type='many2one', relation='res.country'。

 reference

写道
引用型,格式为:fields.reference(字段名, selection, size, ... )。其中selection是: 1)返回tuple列表的函数,或者 2)表征该字段引用哪个对象(or model)的tuples列表。reference字段在数据库表中的存储形式是(对象名,ID),如(product.product,3)表示引用对象product.product(数据表product_product)中id=3的数据。reference的例子:
def _links_get(self, cr, uid):
cr.execute('select object,name from res_request_link order by priority')
return cr.fetchall()

...
'ref':fields.reference('Document Ref 2', selection=_links_get, size=128),
...
上例表示,字段ref可以引用哪些对象类型的resource,可引用的对象类型从下拉框选择。下拉框的选项由函数_links_get返回,是(object,name)对的列表,如[("product.product","Product"), ("account.invoice","Invoice"), ("stock.production.lot","Production Lot")] 。

 

 

关系类型:one2one, one2many, many2one, many2many

写道
one2one: 一对一关系,格式为:fields.one2one(关联对象Name, 字段显示名, ... )。在V5.0以后的版本中不建议使用,而是用many2one替代。

many2one: 多对一关系,格式为:fields.many2one(关联对象Name, 字段显示名, ... )。可选参数有:ondelete,可选值为"cascade"和"null",缺省值为"null",表示one端的record被删除后,many端的record是否级联删除。

one2many: 一对多关系,格式为:fields.one2many(关联对象Name, 关联字段, 字段显示名, ... ),例:'address': fields.one2many('res.partner.address', 'partner_id', 'Contacts')。

many2many: 多对多关系。例如:
'category_id':fields.many2many('res.partner.category','res_partner_category_rel','partner_id','category_id','Categories'),
表示以多对多关系关联到对象res.partner.category,关联表为'res_partner_category_rel',关联字段为'partner_id'和'category_id'。当定义上述字段时,OpenERP会自动创建关联表为'res_partner_category_rel',它含有关联字段'partner_id'和'category_id'。

 

 

**   字段定义的参数  **

 

写道
change_default:别的字段的缺省值是否可依赖于本字段,缺省值为:False。例子(参见res.partner.address),
'zip': fields.char('Zip', change_default=True, size=24),

这个例子中,可以根据zip的值设定其它字段的缺省值,例如,可以通过程序代码,如果zip为200000则city设为“上海”,如果zip为100000则city为“北京”。

readonly: 本字段是否只读,缺省值:False。
required: 本字段是否必须的,缺省值:False。
states: 定义特定state才生效的属性,格式为:{'name_of_the_state': list_of_attributes},其中list_of_attributes是形如[('name_of_attribute', value), ...]的tuples列表。例子(参见account.transfer):
'partner_id': fields.many2one('res.partner', 'Partner', states={'posted':[('readonly',True)]}),

string: 字段显示名,任意字符串。
translate: 本字段值(不是字段的显示名)是否可翻译,缺省值:False。
size: 字段长度。
priority:
domain: 域条件,缺省值:[]。在many2many和many2one类型中,字段值是关联表的id,域条件用于过滤关联表的record。例子:
'default_credit_account_id': fields.many2one('account.account', 'Default Credit Account', domain="[('type','!=','view')]"),

本例表示,本字段关联到对象('account.account')中的,type不是'view'的record。

invisible: 本字段是否可见,即是否在界面上显示本字段,缺省值True。
selection: 只用于reference字段类型,参见前文reference的说明。

 

写道
• Attributs 说明
•context: 在context 中增加一些变量,这些变量可用于on_change方法及domain条件式。
•on_change: 当本字段值改变时,调用Server端函数。例子:
on_change=”onchange_shop_id(shop_id)”.
•relation:当本字段是一个引用其他数据表的id 时,指定关联数据表名。通常用在related 和
function 类型的字段中。

• 级联关系:
•ondelete
•set null: 删除主记录时候,从记录到主记录的引用置为null。
•set default: 删除主记录时候,从记录到主记录的引用置为缺省值。
•cascade: 删除主记录时候,级联删除从记录。
•restrict: 如果有从记录,不允许删除主记录。
•no action: 不采取任何动作,即删除主记录,但保留从记录不变。

 

分享到:
评论

相关推荐

    openerp.zip_openERP

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

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

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

    OpenERP开发基础教程

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

    OpenERP 文档

    通过以上知识点的详细介绍,我们可以看到 OpenERP Web 不仅提供了强大的功能,还注重开发者的体验。从基础知识到高级主题,从 JavaScript 技术栈到视图设计,OpenERP Web 都提供了详尽的指南和支持。开发者可以根据...

    openerp部署训练文档

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

    openerp教程

    openerp教程

    OpenERP.rar_openERP

    这个压缩包文件“OpenERP.rar_openERP”包含了关于OpenERP的应用和开发基础的详细资料,主要以“OpenERP应用和开发基础_091224.pdf”这本书的形式呈现。 首先,我们要理解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应用和开发基础,随着openerp的发展,越来越多的中小企业开始应用此erp系统,免费开源是最大的特点

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

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

    OpenERP Installing Ubuntu9.04

    OpenERP Installing Ubuntu9.04

    openerp 免费下载

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

    openerp+nginx配置方法

    openerp+nginx配置方法, 非常详细的资料,可以参考使用。

    OpenERP操作指南

    OpenERP操作指南

    openERP 7.0使用手册 第五章 采购基本操作

    在OpenERP中创建采购订单涉及多个字段,如供应商、订单日期、单位、供应商单号、源单据、预计日期、开票方式等。其中,开票方式有三种选择:基于采购单明细、基于生成的发票草稿和基于收货量。此外,订单的状态(如...

    使用虚拟机VM运行Linux版OpenERP

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

    openerp 7.0 allinone part2

    openerp 7.0 allinone 安装包part1

    OpenERP应用和开发基础

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

    OpenERP_Technical开发教程

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

    OpenERP_6.1_web框架指南

    OpenERP_6.1_web框架指南

Global site tag (gtag.js) - Google Analytics