odoo12:字段定义

odoo12:定义对象类型

定义对象类型
基础类型:char, text, boolean, integer, float, date, time, datetime, binary;
复杂类型:selection, function, related;
关系类型:Many2many,Many2one,One2many。

一、基础类型

在这里插入图片描述

二、复杂类型

selection下拉框,如图所示:

在这里插入图片描述
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 顾名思义“引用”,那么又是怎么样引用的呢?
新API实例:
1.coupon_name=fileds.Char(“user_id.name”,String=u’用户名’)
该实例中user_id字段是本表中字段与res.user模型关联,改实例直接将该user_id关联的User表数据中的 name字段值应用到本模型中,改字段不存放到数据库
2.旧API实例:
‘invoice’: fields.function(_invoice, string=‘Invoice’,
type=‘many2one’, relation=‘account.invoice’, fnct_search=account_move_line._invoice_search,multi=“original”),

三、关系类型

Many2many 多对多
在这里插入图片描述

One2many 一对多
在这里插入图片描述

Many2one 多对一
在这里插入图片描述
本人只是总结最近所看知识点,难免有一些内容参考一些网上资料,如果对您造成影响,请通知删除。
请各位大神指教。

猜你喜欢

转载自blog.csdn.net/qq_43239192/article/details/86388783
今日推荐