如何根据odoo中的条件隐藏字段?
How to hide fields based on condition in odoo?
我为 products.Products 创建了几个自定义字段出现在销售、采购、仓库和制造中 module.I 想让我的自定义字段只出现在制造模块中并隐藏在任何地方 else.So如何在不可见 attribute.I 上设置条件 像这样尝试并得到错误 Unknown field _name in domain
attrs="{'invisible': [('_name', '!=', 'mrp.bom')]}"
Python 文件,
from openerp import fields,models, api
class product_template(models.Model):
_inherit = "product.template"
rim_weight = fields.Float(string='Rim Weight(KG)', readonly=True, compute='_compute_one_rim_weight')
width = fields.Float(string='Width(cm)',default='50')
length = fields.Float(string='Length(cm)',default='63')
gsm = fields.Float(string='Gram per square meter(gsm)',default='230')
Xml 文件,
<record id="product_template_form_view_dis_inherit" model="ir.ui.view">
<field name="name">product.template.common.form.dis.inherit</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"/>
<field name="arch" type="xml">
<xpath expr="//page[@string='Accounting']" position='after'>
<page string='Cover Page Paper'>
<group>
<field name="width"/>
<field name="length"/>
<field name="gsm"/>
<field name="rim_weight"/>
</group>
</page>
</xpath>
</field>
</record>
有很多方法可以做到这一点,但我建议您使用以下选项。
修改现有操作并在其中设置上下文,并根据该上下文在视图中写入条件。 (记住这里你需要覆盖一个动作,如果你想创建另一个那么你需要重新定义菜单来为那个菜单分配新的动作)。
创建新视图并在要显示这些字段的模型的操作中设置此视图引用。在新视图中您需要看到这些字段,无需扩展产品模板现有视图。
然而,第一个解决方案很容易实现,第二个解决方案很冗长。
第一个解决方案示例:
<record id="action_name" model="ir.actions.act_window">
<field name="name">Name</field>
<field name="res_model">product.template</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context" eval="{'is_manufacturing_model':True}" />
</record>
然后在视图中这样写就可以了
<page string='Cover Page Paper'>
<group invisible="context.get('is_manufacturing_model',False)">
<field name="width"/>
<field name="length"/>
<field name="gsm"/>
<field name="rim_weight"/>
<group>
</page>
我为 products.Products 创建了几个自定义字段出现在销售、采购、仓库和制造中 module.I 想让我的自定义字段只出现在制造模块中并隐藏在任何地方 else.So如何在不可见 attribute.I 上设置条件 像这样尝试并得到错误 Unknown field _name in domain
attrs="{'invisible': [('_name', '!=', 'mrp.bom')]}"
Python 文件,
from openerp import fields,models, api
class product_template(models.Model):
_inherit = "product.template"
rim_weight = fields.Float(string='Rim Weight(KG)', readonly=True, compute='_compute_one_rim_weight')
width = fields.Float(string='Width(cm)',default='50')
length = fields.Float(string='Length(cm)',default='63')
gsm = fields.Float(string='Gram per square meter(gsm)',default='230')
Xml 文件,
<record id="product_template_form_view_dis_inherit" model="ir.ui.view">
<field name="name">product.template.common.form.dis.inherit</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"/>
<field name="arch" type="xml">
<xpath expr="//page[@string='Accounting']" position='after'>
<page string='Cover Page Paper'>
<group>
<field name="width"/>
<field name="length"/>
<field name="gsm"/>
<field name="rim_weight"/>
</group>
</page>
</xpath>
</field>
</record>
有很多方法可以做到这一点,但我建议您使用以下选项。
修改现有操作并在其中设置上下文,并根据该上下文在视图中写入条件。 (记住这里你需要覆盖一个动作,如果你想创建另一个那么你需要重新定义菜单来为那个菜单分配新的动作)。
创建新视图并在要显示这些字段的模型的操作中设置此视图引用。在新视图中您需要看到这些字段,无需扩展产品模板现有视图。
然而,第一个解决方案很容易实现,第二个解决方案很冗长。
第一个解决方案示例:
<record id="action_name" model="ir.actions.act_window">
<field name="name">Name</field>
<field name="res_model">product.template</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context" eval="{'is_manufacturing_model':True}" />
</record>
然后在视图中这样写就可以了
<page string='Cover Page Paper'>
<group invisible="context.get('is_manufacturing_model',False)">
<field name="width"/>
<field name="length"/>
<field name="gsm"/>
<field name="rim_weight"/>
<group>
</page>