如何在Odoo 12中为表单字段创建动态标签?

时间:2020-04-16 16:37:03

标签: xml odoo odoo-12

我有一个表单视图。我在其中添加了字段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;设置为标签,但是保留了它们所在单元格的样式,因此我的方法无法正常工作。

有什么想法吗?我试图避免为每个标签创建辅助字段,因为我必须使用大量标签来进行此操作,这很麻烦。谢谢!

1 个答案:

答案 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>

无论如何,如果有人找到了更好的解决方案,我将更改接受的答案并将其提供给他们。