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
Apasionado de la programación, implementa Odoo para distintos tipos de negocios desde el año 2010. En Moldeo Interactive es Socio fundador y Programador; además de escribir en el Blog sobre distintos temas relacionados a los desarrollos que realiza.