odoo - включить xml для базовой модели в xml расширяющих моделей - PullRequest
0 голосов
/ 28 июня 2018

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>

1 Ответ

0 голосов
/ 28 июня 2018

Да, существует возможность наследования представлений, но не с 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 нужен внешний идентификатор представления, которое вы хотите расширить / унаследовать. Если идентификатор взят из другого модуля, добавьте имя модуля, как в примере.

...