odoo - включить xml для базовой модели в xml расширяемых моделей

Odoo позволяет легко расширять модели с помощью поля _inherit. Таким образом, можно получить доступ к общему коду и полям базовой модели в расширяющих моделях.

Мой вопрос: могу ли я структурировать свои xml-файлы (например, представления поиска, представления форм и т. Д.) Расширяющихся моделей, чтобы также повторно использовать общий xml-код базовых моделей?

Я читал, что механизм включения шаблона (с использованием t-call) работает только для шаблонов QWeb, но не в целом для представлений xml (см. включить шаблоны). А наследование представления с использованием inherit_id, насколько я понимаю, расширяет существующее представление только для данной модели. Однако это не позволяет включать части существующих представлений для создания нового.

Значит ли это, что я должен скопировать общий xml-код для полей базовой модели во все представления, расширяющие эту модель?

Пример:

Наследование модели

class Base(models.Model):
    _name = 'bla.base'
    common1 = fields.Text()
    common2 = fields.Text()

class ExtA(models.Model):
    _name = 'bla.exta'
    _inherit = ['bla.base']
    field_x = fields.Integer()

class ExtB(models.Model):
    _name = 'bla.extb'
    _inherit = ['bla.base']
    field_y = fields.Integer()

Просмотры

<record model="ir.ui.view" id="exta_search">
    <field name="name">exta.search</field>
    <field name="model">bla.exta</field>
    <field name="arch" type="xml">
        <search>
            <field name="field_x"/>
            <!-- Also include xml to search in base model -->
        </search>
    </field>
</record>

<record model="ir.ui.view" id="extb_search">
    <field name="name">extb.search</field>
    <field name="model">bla.extb</field>
    <field name="arch" type="xml">
        <search>
            <field name="field_y"/>
            <!-- Also include xml to search in base model -->
        </search>
    </field>
</record>

person mihca    schedule 28.06.2018    source источник
comment
А как насчет наследования _inherits (делегирование)? Просмотр наследования будет работать там. Примером могут служить модели Odoo product.template и product.product.   -  person CZoellner    schedule 29.06.2018


Ответы (1)


Да, есть возможность наследования представления, но не с t-call, который предназначен для таких шаблонов, как документы для печати или шаблоны клиентских представлений. Модель ir.ui.view, которая используется для представлений модели, имеет поле inherit_id. Используйте это для расширения исходных представлений или уже расширенных представлений. В стандартных приложениях Odoo много примеров.

Пример: база модуля / приложения имеет модель res.partner и представление формы с внешним идентификатором view_partner_form. Предположим, вы расширили модель новым полем function2, которое должно отображаться сразу после поля function, вам необходимо расширить представление:

<record id="view_partner_form" model="ir.ui.view">
    <field name="name">extended by function2 short example</field>
    <field name="model">res.partner</field>
    <field name="inherit_id" ref="base.view_partner_form" /> <!-- here the inheritance happens -->
    <field name="arch" type="xml">
        <field name="function" position="after">
            <field name="function2" />
        </field>
        <!-- the same extension but with xpath instead -->
        <!-- <xpath expr="//field[@name='function']" position="after">
            <field name="function2" />
        </field> -->
    </field>
</record>

ref требуется внешний идентификатор представления, которое вы хотите расширить / унаследовать. Если идентификатор получен из другого модуля, добавьте имя модуля, как в примере.

person CZoellner    schedule 28.06.2018
comment
Это не то, что я ищу. Используя inherit_id в xml, можно только расширить существующее представление. Однако то, что я пытаюсь сделать, - это создать отдельные представления для моделей ExtA и ExtB, но с общим xml-кодом, вынесенным во внешний вид и включенным там, где это необходимо. Кроме того, в коде Python можно наследовать от нескольких моделей и миксинов. Представления xml не предоставляют таких мощных механизмов. Какая жалость. Единственный вариант, который я вижу, - это копирование и вставка частей xml, что приводит к избыточному коду в представлениях. - person mihca; 29.06.2018
comment
Да, извините, я слишком поздно увидел наследование модели. Никогда не пробовал что-то подобное, но боюсь, что вы правы :-( - person CZoellner; 29.06.2018