Odoo 10 QWeb视图元素隐藏报错:is_customer字段不存在
解决Odoo 10中QWeb视图attrs引用
is_customer字段报错的问题 这个报错的核心原因很明确:is_customer并不是res.partner模型的原生基础字段,它是由sale模块添加的计算字段。你的自定义模块没有正确依赖sale模块,导致视图渲染时找不到这个字段。
下面是具体的解决步骤:
1. 添加模块依赖
在你的自定义模块的__openerp__.py(Odoo 10中模块描述文件采用该命名)里,把sale模块加入到depends列表中,确保模块加载时sale模块已经完成初始化,is_customer字段被正确创建:
{ 'name': '你的自定义模块名称', 'version': '1.0', 'depends': ['base', 'sale'], # 新增sale模块依赖 'data': [ # 填写你的视图文件路径 ], # 其他模块配置项... }
2. 优化视图代码(可选)
你的视图逻辑本身没问题,可以稍微调整下attrs的写法(移除多余的尾逗号),让代码更规范:
<record id="extended_res_partner" model="ir.ui.view"> <field name="name">Extended View</field> <field name="inherit_id" ref="base.view_partner_form"/> <field name="model">res.partner</field> <field name="arch" type="xml"> <notebook position="inside"> <page string="Foo" name="foo" attrs="{'invisible': [('is_customer', '=', False)]}"> <field name="is_customer" invisible="1"/> <span>Foo2</span> </page> </notebook> </field> </record>
额外方案:自定义字段(不依赖sale模块)
如果你不想依赖sale模块,也可以自行在res.partner模型上定义is_customer字段,比如添加一个布尔字段:
from openerp import models, fields class ResPartner(models.Model): _inherit = 'res.partner' is_customer = fields.Boolean(string="Is Customer")
不过这种方式会覆盖sale模块的原生计算字段逻辑,建议根据你的实际业务需求选择。
内容的提问来源于stack exchange,提问作者M.E.
相关产品推荐
相关产品推荐

