我有一个表单视图。我在其中添加了字段main_field
,但是我想根据其他名为conditional_field
的字段的值动态更改其标签。这是我的主要尝试:
<group>
<group name="xxx">
<field name="conditional_field" invisible="1"/>
<label for="main_field" string="AAA" attrs="{'invisible': [('conditional_field', '!=', 'A')]}"/>
<label for="main_field" string="BBB" attrs="{'invisible': [('conditional_field', '!=', 'B')]}"/>
<div>
<field name="main_field" class="oe_inline"/>
</div>
</group>
</group>
此解决方案的问题是标签始终在那儿,只是不可见,但实际上它们在占用空间。
如果隐藏了 BBB ,则main_field
会出现在标签 AAA 下,因为 BBB 是不可见的,但发生在右侧 AAA 。
如果 AAA 被隐藏,则main_field
会出现在标签 BBB 下,而 BBB 在右侧,因为在左侧是不可见的 AAA 发生了,所以看起来更加难看。
问题在于Odoo正在将display: none;
设置为标签,但是保留了它们所在单元格的样式,因此我的方法无法正常工作。
有什么想法吗?我试图避免为每个标签创建辅助字段,因为我必须使用大量标签来进行此操作,这很麻烦。谢谢!
答案 0 :(得分:0)
经过多次尝试,我找到了解决方案。由于单元格分隔符,它并不完美:边框消失了,所以我不得不用CSS复制它,它不如原始的CSS高。但这看起来还不错,不足以适合我的情况。
<group>
<group name="xxx">
<field name="conditional_field" invisible="1"/>
<div class="o_form_label" style="border-right:0.8px solid #ddd; width:101%;">
<label for="main_field" string="AAA" attrs="{'invisible': [('conditional_field', '!=', 'A')]}" style="font-weight:bold;"/>
<label for="main_field" string="BBB" attrs="{'invisible': [('conditional_field', '!=', 'B')]}" style="font-weight:bold;"/>
</div>
<field name="main_field" nolabel="1" style="padding-left:8px;"/>
</field>
</group>
</group>
很明显, CSS样式将根据您在其中放置标签的表单的哪个部分而改变。例如,如果您要在发票,订单等的“总计”部分中执行此操作,则代码如下:
<group class="oe_subtotal_footer oe_right">
<field name="conditional_field" invisible="1"/>
<div class="oe_right">
<label for="main_field" string="AAA" attrs="{'invisible': [('conditional_field', '!=', 'A')]}" style="font-weight:bold; margin:0;"/>
<label for="main_field" string="BBB" attrs="{'invisible': [('conditional_field', '!=', 'B')]}" style="font-weight:bold; margin:0;"/>
</div>
<field name="main_field" nolabel="1"/>
</group>
无论如何,如果有人找到了更好的解决方案,我将更改接受的答案并将其提供给他们。