ODOO 开发备忘录(一)

大家好,

为了方便各位开发大咖快速找到资料,这里总结了odoo开发中的一些基础信息,还望大家提出意见。

对象关系映射服务 – ORM

预定义的属性

_name (required)

业务模型名称, 请使用带点的语法标识 (在 模型的命名空间中)

_columns (required)

字典 {字段名称 → 字段声明 }

_defaults

字典: {字段名称→提供 字面上或者功能上的默认}
_defaults['name'] = lambda self,cr,uid,context: 'eggs'

_auto

如果为 True (default) ORM会自动创建数据库表:设置为False后, 您可以通过 init() 方法来创建您的表/视图;

_inherit

父级业务逻辑 _name,用于定义继承;

_inherits

用于高级继承: 通过字典映射父级业务逻辑的 _name到相关字段的外部键值

_constraints

通过元组的列表定义 Python 约束, 使用如下形式
(func_name, message, fields)

_sql_constraints

通过一系列元组列表定义 SQL 约束, 使用以下形式
(name, sql_def, message)

_log_access

如果为 True (default), 以下 4 个字段 (create_uid, create_date, write_uid,
write_date) 会自动在记录级别的操作中被自动记录于日志中, 并可以通过 perm_read() 方法来读取

_order

用于为列表中记录进行排序的字段名称(默认: 'id')

_rec_name

用作名称的可选字段, 通常被 name_get() 方法使用 (默认:
'name')

_sql

SQL 代码,用于为模型创建表/视图 (当 _auto 为
False) – 可以被init() 方法中的SQL执行所替代

_table

需要使用的SQL表 (默认: _name 使用 '.' 替代下划线 '_')

ORM 字段类型

• string: 字段标识 (必填)
• required:True,则为强制填写
• readonly: True,则无法编辑
• help: 帮助工具提示
• select: True,创建一个此列的数据库索引
• context: 上下文词典参数 (对于关系字段)
• change_default: True ,则字段应该用于客户端中默认值的条件
• states: 根据状态,动态更改基于状态的公共属性

简洁字段

boolean(...) integer(...) date(...)datetime(...) time(...)

'active': fields.boolean('Active'),
'priority': fields.integer('Priority'),
'start_date': fields.date('Start Date'),

char(string,size,translate=False,..)
text(string, translate=False, …)

文本类字段
• translate: True,则值可以被用户翻译, 仅对 char/text 字段
• size: 选填的char字段最大大小

float(string, digits=None, ...)

十进制值
• digits: 元组 (精度, 比例)

selection(values, string, ...)

此字段允许在一系列已定义的值中进行选择

• values: 值的列表 (键值标记的元组) 或者
一个返回此类列表的元组

binary(string, filters=None, ...)

用于存储文件或二进制文件的字段.
• filters: 可选文件名筛选器
'picture': fields.binary('Picture',
filters='.png,.gif')

reference(string, selection, size,..)

具有动态关系到其他对象的字段,和一个widget配对

• selection: model 被允许对象类型及对应标签的 _name(与选择字段的值相同格式) (必填)

• size: 用于存储文本列的大小
(storage format is 'model_name,object_id')
'contact': fields.reference('Contact',[
('res.partner','Partner'),
('res.partner.contact','Contact')])

关系字段

domain: 可选的过滤器形式搜索参数 ( search())

many2one(obj, ondelete='set null', …)

与父母对象的关系 (使用外键值)
• obj: 目标对象的 _name (required)
• ondelete: 删除处理, e.g. '设为 null',
'cascade', 参见 PostgreSQL 文档

one2many(obj, field_id, …)

多个对象的虚拟关系(many2one的反向)
• obj: 目标对象的 _name (required)
• field_id: 逆字段名 many2one, i.e.
相应外键 (required)

many2many(obj, rel, field1, field2, …)

模型间的双向多重

• obj: 目标对象的_name (required)
• rel: 使用的关系表的可选名称(默认: 自动指定的基于模型名称)
• field1:当前对象的ID (default: based on model)
• field2: 目标对象的ID (default: based on model)

函数字段

function(fnct, arg=None, fnct_inv=None, fnct_inv_arg=None, type='float',
fnct_search=None, obj=None, store=False, multi=False,…)

模拟真实字段的函数字段, 计算出值而非存储
• fnct: 计算字段值的函数 (required)
def fnct(self, cr, uid, ids, field_name, arg, context)
returns a dictionary { ids→values }
• fnct_inv: 用于在字段中写入值的函数而非
def fnct_inv(obj, cr, uid, id, name, value, fnct_inv_arg, context)
• type: 模拟字段的类型 (可以是除 'function'以外的任何)
• fnct_search:用于在此字段上搜索的函数
def fnct_search(obj, cr, uid, obj, name, args)
返回元组参数列表 search(), e.g. [('id','in',[1,3,5])]
• obj: 模拟字段的 _name
• store, multi: 优化机制

related(f1, f2, …, type='float', …)

与浏览链接字段等效的快捷字段
• f1,f2,...: 链接字段以到达目标 (f1 required) (→51)
• type: 目标字段的类

property(obj, type='float', view_load=None, group_name=None, …)

具有特定访问权限的动态属性
• obj: object (required)
• type: 类型

对称性

• one2many ↔ many2one 
• many2many ↔ many2many
• one2many ↔ many2one + many2one ↔ one2many = many2many

谢谢!
欢迎提出意见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值