Как создать метку динамического c для поля формы в Odoo 12? - PullRequest
1 голос
/ 16 апреля 2020

У меня есть вид формы. Я добавил к нему поле 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 происходит, поэтому выглядит еще хуже работать правильно.

Есть идеи? Я пытаюсь избежать создания вспомогательных полей для каждой метки, потому что я должен делать это с большим количеством меток, и это было бы беспорядком. Спасибо!

1 Ответ

0 голосов
/ 17 апреля 2020

После многих попыток я нашел решение. Он не идеален из-за разделителя ячеек: граница исчезает, поэтому мне пришлось повторить ее с 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 будут меняться в зависимости от того, в какой части формы вы размещаете метку в, Например, если вы хотите сделать это в разделе счета-фактуры classi c, заказы и т. Д. c. это будет код:

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

В любом случае, если кто-то найдет лучшее решение, я изменю принятый ответ и дам его им.

...