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

Xml 如何在Odoo 12中为表单字段创建动态标签?,xml,odoo,odoo-12,Xml,Odoo,Odoo 12,我有一个表单视图。我向它添加了字段main\u field,但我想根据名为conditional\u field的其他字段的值动态更改其标签。这是我的主要尝试: <group> <group name="xxx"> <field name="conditional_field" invisible="1"/> <label for="main_field" string="AAA" attrs="{'invisib

我有一个表单视图。我向它添加了字段
main\u field
,但我想根据名为
conditional\u 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_字段
将显示在标签AAA下,因为BBB是不可见的,但发生在AAA的右侧。 如果AAA是隐藏的,
main_字段
显示在标签BBB下,BBB位于右侧,因为在左侧是不可见的AAA,因此看起来更难看

问题是Odoo正在设置
display:none到标签,但保留了标签所在单元格的样式,因此我的方法无法正常工作


有什么想法吗?我试图避免为每个标签创建辅助字段,因为我必须用很多标签来创建辅助字段,这将是一个混乱。谢谢大家!

经过多次尝试,我找到了解决办法。它不是完美的,因为单元格分隔符:边框消失了,所以我不得不用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>


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

经过多次尝试,我找到了一个解决方案。它不是完美的,因为单元格分隔符:边框消失了,所以我不得不用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>


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

您是否可以使用check css检查该元素并删除多余的填充(如果有)。稍后您可以在模块中使用SCS。@DipenShah这可能是一个解决方案,但我正在使用Odoo框架寻找一个解决方案。我将发布一个我制作的解决方案,如果您愿意,请查看并给出您的意见。您是否可以使用check css检查该元素并删除多余的填充(如果有)。稍后您可以在模块中使用SCS。@DipenShah这可能是一个解决方案,但我正在使用Odoo框架寻找一个解决方案。我将发布一个我提出的解决方案,看看,如果你愿意,给出你的意见。