我想做这样的事情: -
<record id="view_form" model="ir.ui.view">
<field name="name">module.form</field>
<field name="model">module.form</field>
<field name="inherit_id" ref="another_module.view_form"/>
<field name="priority" eval="20"/>
<field name="arch" type="xml">
<xpath expr="//notebook" position="replace">
<notebook t-if="context.get('no_error', False)">
<page name="A" string="A">
<group>
<field name='save'/>
</group>
</page>
</notebook>
<notebook t-if="not context.get('no_error', False)">
<page name="A" string="A">
<group>
<field name='save' widget="my_widget"/>
</group>
</page>
</notebook>
</xpath>
</field>
</record>
但是我在UI / View中获得了两个笔记本
我尝试使用t-esc打印该值但是我没有得到任何值。
可以做这样的事情,还是我们可以在xpath中使用上下文?
答案 0 :(得分:1)
您无法在普通表单视图中使用qweb。这是模板和报告
但是你可以创建一个辅助字段,它可能是一个计算字段,例如
aux = fields.Char(
string='Aux',
compute='_compute_sale_order'
)
@api.multi
@api.depends('some_field')
def _compute_aux(self):
self.aux = 'no_error'
# or self.env.context.get('no_error', False)
XML视图应该是:
<record id="view_form" model="ir.ui.view">
<field name="name">module.form</field>
<field name="model">module.form</field>
<field name="inherit_id" ref="another_module.view_form"/>
<field name="arch" type="xml">
<field name="name" position="before"> <!-- or some other field -->
<field name="aux" invisible="1" />
</field>
<notebook position="inside">
<page name="A" string="A" attrs="{'invisible': [('aux', '=', 'no_error')]}">
<group>
<field name="save" widget="my_widget"/>
</group>
</page>
</notebook>
</field>
</record>
请注意,您无法在同一表单中使用同一项目两次。因此,如果您想要显示<field name='save'/>
或<field name='save' widget="my_widget"/>
,则应为每个人创建一个独立的表单视图。
或者您可以尝试使用应在模型中定义的方法fields_view_get
修改视图,类似这样(我还没有测试):
def fields_view_get(self, cr, uid, view_id=None, view_type='form',
context=None, toolbar=False, submenu=False):
res = super(ModelName, self).fields_view_get(
cr, uid, view_id=view_id, view_type=view_type, context=context,
toolbar=toolbar, submenu=submenu)
if view_type == 'form':
eview = etree.fromstring(res['arch'])
no_error = context.get('no_error', False)
if eview.attrib.get('name', '') == 'save' and no_error != False:
eview.set('widget','my_widget')
res['arch'] = etree.tostring(eview)
return res