Resolviendo el error "View inheritance may not use attribute 'string' as a selector."
Dicho error sucede cuando en heredamos una vista y deseamos modificar un elemento del cual no tenemos ni el name ni el id. O peor, su name esta repetido y solo se lo puede modificar por medio del string. Como es el caso de la vista account.view_move_form donde nos encontramos con los siguientes botones de confirmación
<button name="action_post" string="Post" class="oe_highlight"
type="object" groups="account.group_account_invoice"
attrs="{'invisible': ['|', '|', ('state', '!=', 'draft'), ('auto_post', '=', True), ('move_type', '!=', 'entry')]}"/>
<button name="action_post" string="Confirm" class="oe_highlight"
type="object" groups="account.group_account_invoice"
attrs="{'invisible': ['|', '|', ('state', '!=', 'draft'), ('auto_post', '=', True), ('move_type', '=', 'entry')]}"/>
En este caso, si deseamos trabajar con el segundo botón, solo podemos hacerlo con xpath mediante el string, pero si tratamos de hacerlo con Odoo obtenemos el error View inheritance may not use attribute 'string' as a selector. La única manera de hacerlo es mediante el índice del objeto en xpath, como hacemos en el módulo l10n_ar_afipws_fe
<button name="action_post" position="attributes">
<attribute name="attrs">{'invisible': ['|', ('state', '!=', 'draft'), ('validation_type', '!=', False)]}</attribute>
<attribute name="states"></attribute>
</button>
<xpath expr="//button[@name='action_post'][2]" position="attributes">
<attribute name="attrs">{'invisible': ['|', ('state', '!=', 'draft'), ('validation_type', '!=', False)]}</attribute>
<attribute name="states"></attribute>
</xpath>
En el último caso, mediante xpath seleccionamos el segundo botón mediante su índice. No es la solución ideal (sería bueno hacerlo mediante el string) pero hacemos lo que nos permite hacer Odoo.
Acerca de:
Gustavo Orrillo
Passionate about programming, he has implemented Odoo for different types of businesses since 2010. In Moldeo Interactive he is a founding Partner and Programmer; In addition to writing on the Blog about different topics related to the developments he makes.