Odoo技术问题:为标签页树形视图添加域过滤器
Odoo合作伙伴表单树形视图域过滤无效的解决办法
刚接触Odoo,想在合作伙伴表单里新增一个树形视图,只展示该联系人的“active”状态合同,但直接在树形视图标签上设置domain="[('state', '=', 'active')]"完全没效果,请问正确的实现方式是什么?
用户提供的原始代码:
<record model="ir.ui.view" id="view_partner_form_inherit"> <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"> <notebook position="inside"> <page string="Contracts"> <field name="contract_ids"> <tree domain="[('state', '=', 'active')]"> <field name="state" invisible="1" /> <field name="name" /> <field name="arrears" /> <field name="total_amount_paid" /> </tree> </field> </page> </notebook> </field> </record>
正确实现方式
1. 将域过滤移到关联字段标签上
Odoo中,针对one2many这类关联字段的子集过滤,必须把domain属性定义在<field>标签上,而不是嵌套的树形视图标签里。树形视图的domain属性仅适用于独立视图(比如菜单对应的全局树形视图),无法过滤关联字段的子集。
修改后的代码:
<record model="ir.ui.view" id="view_partner_form_inherit"> <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"> <notebook position="inside"> <page string="Contracts"> <!-- 把domain属性移到contract_ids字段上 --> <field name="contract_ids" domain="[('state', '=', 'active')]"> <tree> <field name="state" invisible="1" /> <field name="name" /> <field name="arrears" /> <field name="total_amount_paid" /> </tree> </field> </page> </notebook> </field> </record>
2. 额外注意点
- 确认
contract_ids是res.partner到合同模型的one2many关联字段,且合同模型的state字段确实存在"active"这个可选值 - 如果需要动态过滤(比如根据当前合作伙伴的公司过滤合同),可以在domain里引用父级字段,例如:
[('state', '=', 'active'), ('company_id', '=', parent.company_id)]
内容的提问来源于stack exchange,提问作者djangbahevans
相关产品推荐
相关产品推荐

