Odoo字段详解

演示代码

在/模型添加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升序排列。
如_order = ‘date_release desc, name’,先按照时间排序再按照标题排序
_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,可选值为’级联’和’空’,set null, restrict, cascade 默认是: set null 缺省为空 。表示一个端删除时多端是否级联删除。
    set null: 当b中删除记录时,modelA中相关记录的a=null
    cascade: 当b中删除记录时,modelA中相关记录也全部删除
    restrict: 当b中删除记录时,如果modelA中存在对应记录,则无法操作 b 的删除
  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用于过滤关联表中数据。
    例子写法:domain="[(‘product_id’, ‘=’, ‘id’)]"
    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)

inverse:允许在计算字段上设置值。反转计算和设置相关字段的函数的名称
例子:

document = fields.Char(compute='_get_document', inverse='_set_document')

def _get_document(self):
    for record in self:
        with open(record.get_document_path) as f:
            record.document = f.read()
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值