在Odoo中,attrs
属性用于动态修改表单视图中字段的属性(如隐藏、只读或必填)基于其他字段的值。它主要用于视图XML中定义表单视图时。attrs
属性采用一个字典格式,其中键是要修改的属性(如invisible
、readonly
、required
),值是一个域表达式(domain expression),用来决定何时修改这些属性。
下面是一个使用attrs
的示例,我们将创建一个简单的Odoo模块视图。在这个例子中,假设有一个模型res.partner
扩展了默认的合作伙伴模型,添加了两个字段:is_student
(是一个布尔字段)和school_name
(是一个字符字段)。我们想要school_name
字段只有当is_student
为True
(即,选中状态)时才可见。
首先是模型的Python代码部分(models/partner.py
):
from odoo import models, fields
class ResPartner(models.Model):
_inherit = 'res.partner'
is_student = fields.Boolean(string="Is a Student")
school_name = fields.Char(string="School Name")
然后是视图XML部分(views/partner_view.xml
):
<odoo>
<record id="view_partner_form_inherit" model="ir.ui.view">
<field name="name">res.partner.form.inherit</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='is_company']" position="after">
<field name="is_student"/>
<field name="school_name" attrs="{'invisible': [('is_student', '=', False)]}"/>
</xpath>
</field>
</record>
</odoo>
在这个XML视图定义中,attrs
属性用于school_name
字段。这里的attrs="{'invisible': [('is_student', '=', False)]}"
表示当is_student
字段的值为False
时,school_name
字段将会被隐藏。字典中的invisible
是我们想要修改的属性,而[('is_student', '=', False)]
是一个域表达式,用于判断is_student
字段的值。
invisible
: 控制字段的可见性。如果域表达式计算结果为True
,字段将不可见。readonly
: 控制字段是否只读。如果域表达式计算结果为True
,字段将变为只读状态。required
: 控制字段是否必填。如果域表达式计算结果为True
,字段将变为必填状态。