odoo 模型与ORM

10次阅读

共计 2808 个字符,预计需要花费 8 分钟才能阅读完成。

型号属性
在 / 模型添加 activity.py 文件
class ActivityEvent(models.Model):
_name = ‘activity.event’
_inherit = ‘event.event’
_rec_name = ‘test_field’

# 字段
test_field = fields.Char(string=” 字段名称 ”)

# 多对多的关联表
employee_ids = fields.Many2many(‘files.employee’, ‘activity_event_files_employee_rel’, string=’ 与会员工 ’)
event_type_id = fields.Many2one(
‘activity.type’, string=’Category’,
readonly=False, states={‘done’: [(‘readonly’, True)]},
oldname=’type’)

model 属性详解:: 类型
_name 唯一标识,类非继承父类时必须指定。
_rec_name:数据显示名称,如设置则返回其指定的字段值,不设置默认显示字段为 name 的字段值,如无名字段则显示“模块名,ID”; 详见 BaseModel.name_get 方法。
_log_access:是否自动增加日志字段(create_uid,create_date,write_uid,write_date)默认为真。
_auto:是否创建数据库对象默认为真,详见 BaseModel._auto_init 方法。
_table:数据库对象名称缺。省时数据库对象名称与_name 指定值相同(. 替换为下划线)
_sequence。:数据库 id 字段的序列。默认自动创建序列。
_order:数据显示排序。所指定值为模型字段,按指定字段和方式排序结果集。例:_order =“create_date desc”:根据创建时间降序排列。可指定多个字段。不指定 desc 默认升序排列; 不指定_order 默认 id 升序排列。

_constraints:自定义约束条件模型创建 / 编辑数据时触发,约束未通过弹出错误提示,拒绝创建 / 编辑。格式:: _constraints = [(method, ‘error message’, [field1, …]), …]method 检查方法。返回 True | False error message:不符合检查条件时(方法返回 False)弹出的错误信息 [field1, …]:字段名列表,这些字段的值会出现在错误消息中。
_sql_constraints:数据库约束。
例:_sql_constraints = [(‘number_uniq’, ‘unique(number, code)’, ‘error message’) ] 会在数据库添加约束:CONSTRAINT number_uniq UNIQUE(number, code)

_inherit。:单一继承值为所继承父类_name 标识如子类不定义_name 属性,则在父类中增加该子类下的字段或方法,不创建新对象; 如子类定义_name 属性,则创建新对象,新对象拥有父类所有的字段或方法,父类不受影响。格式:_inherit = ‘ 父类 _name’

_inherits:多重继承子类通过关联字段与父类关联,子类不拥有父类的字段或方法,但是可以直接操作父类的字段或方法。格式:_inherits = {‘ 父类 _name’: ‘ 关联字段 ’}

字段属性
基础类型

Char:字符型,使用尺寸参数定义字符串长度。
Text:文本型,无长度限制。
Boolean:布尔型(真,假)
Interger:整型
Float:浮点型,使用数字参数定义整数部分和小数部分位数如。digits=(10,6)
Datetime:日期时间型
Date:日期型
Binary:二进制型
selection:下拉框字段。

例:state = fields.Selection([(‘draft’, ‘Draft’),(‘confirm’, ‘Confirmed’),(‘cancel’, ‘Cancelled’)], string=’Status’)

Html:可设置字体格式,样式,可添加图片.
关系类型
1. One2many:一对多关系。

定义:otm = fields.One2many(“ 关联对象 _name”, “ 关联字段 ”,string=” 字段显示名 ”,…)
例:analytic_line_ids = fields.One2many(‘account.analytic.line’, ‘move_id’, string=’Analytic lines’)”

2. Many2one

定义:mto = fields.Many2one(“ 关联对象 _name”, string=” 字段显示名 ”,…)
可选参数:ondelete,可选值为 ’ 级联 ’ 和 ’ 空 ’,缺省为空表示一个端删除时多端是否级联删除。

3. Many2many
定义:mtm = fields.Many2many(“ 关联对象 _name”, “ 关联表 / 中间表 ”,” 关联字段 1 ″,” 关联字段 2 ″,string=” 字段显示名 ”,…)
其中,关联字段,关联表 / 中间表可不填,中间表缺省为:表 1_表 2_rel
例:partner_id= fields.Many2many(“res.partner”, string=” 字段显示名 ”,…)”
复杂类型
参数

readonly:是否只读,缺省值 False。
required:必填填,缺省值 Falsse。
string:字段显示名,任意字符串。
default:字段默认值
domain:域条件,缺省值 []。在关系型字段中,domain 用于过滤关联表中数据。
help:字段描述,鼠标滑过时提示。
store:是否存储于数据库。结合计算和相关使用。例:sale_order = fields.One2many(“sale.order”, “contract_id”,string=” 销售订单 ”, domain=[(‘state’,’=’,’sale’)])

compute:字段值由函数计算,该字段可不储存于数据库。例:amount = fields.Float(string=” 金额总计 ”, compute=‘_compute_amount’,store=True)_compute_amount 为计算函数。

related:字段值引用关联表中某字段。以下代码表示:company_id 引用 hr.payroll.advice 中 company_id
advice_id = fields.Many2one(‘hr.payroll.advice’, string=’Bank Advice’)company_id = fields.Many2one(‘res.company’, related=’advice_id.company_id’, string=’Company’, store=True)

正文完
 0