Что такое опция «Просмотр полей» в меню разработчика Odoo 11? - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь отладить модуль с помощью режима разработчика и меню, которое можно открыть с помощью символа ошибки.Есть пункт меню «Редактировать вид формы», который очень удобен, если вы хотите посмотреть исходный код форм.Также есть пункт меню «Просмотр полей», который показывает ту же форму немного по-другому.

Я не понимаю, откуда взялись дополнительные предметы.В определении поля есть несколько дополнительных атрибутов, и часто есть модификаторы элементов = "{...}".

Откуда берутся эти дополнительные атрибуты?

Пример кода из формы, определяющей партнера:

представление полей get

<form string="Partner" modifiers="{}">
<sheet modifiers="{}">
    <div class="oe_button_box" name="button_box" modifiers="{}">
        <button class="oe_stat_button o_res_partner_tip_opp" type="action" attrs="{'invisible': [('customer', '=', False)]}" name="273" icon="fa-star" context="{'search_default_partner_id': active_id}" modifiers="{'invisible':[['customer','=',false]]}" options="{}">
            <field string="Verkaufschancen" name="opportunity_count" widget="statinfo" modifiers="{'readonly':true}"/>
        </button>

редактировать вид формы

<form string="Partners">
            <sheet>
                <div class="oe_button_box" name="button_box">
                    <button name="toggle_active" type="object" class="oe_stat_button" icon="fa-archive">
                        <field name="active" widget="boolean_button" options="{&quot;terminology&quot;: &quot;archive&quot;}"/>
                    </button>

1 Ответ

0 голосов
/ 22 февраля 2019

О полях view_get

В каждой модели Odoo есть метод fields_view_get, который вы можете перезаписать.этот метод выполняется после загрузки кода XML представления и перед его отображением в HTML.Это означает, что вы можете делать некоторые динамические изменения в представлениях.Ищите def fields_view_get в модулях Odoo, вы найдете много случаев.Пример:

@api.model
def fields_view_get(self, view_id=None, view_type='form', toolbar=False,
                    submenu=False):
    result = super(AccountMoveLine, self).fields_view_get(view_id,
                                                          view_type,
                                                          toolbar=toolbar,
                                                          submenu=submenu)

    doc = etree.XML(result['arch'])
    if view_type == 'tree' and self._module == 'account_payment_order':
        if not doc.xpath("//field[@name='balance']"):
            for placeholder in doc.xpath(
                    "//field[@name='amount_currency']"):
                elem = etree.Element(
                    'field', {
                        'name': 'balance',
                        'readonly': 'True'
                    })
                orm.setup_modifiers(elem)
                placeholder.addprevious(elem)
        if not doc.xpath("//field[@name='amount_residual_currency']"):
            for placeholder in doc.xpath(
                    "//field[@name='amount_currency']"):
                elem = etree.Element(
                    'field', {
                        'name': 'amount_residual_currency',
                        'readonly': 'True'
                    })
                orm.setup_modifiers(elem)
                placeholder.addnext(elem)
        if not doc.xpath("//field[@name='amount_residual']"):
            for placeholder in doc.xpath(
                    "//field[@name='amount_currency']"):
                elem = etree.Element(
                    'field', {
                        'name': 'amount_residual',
                        'readonly': 'True'
                    })
                orm.setup_modifiers(elem)
                placeholder.addnext(elem)
        # Remove credit and debit data - which is irrelevant in this case
        for elem in doc.xpath("//field[@name='debit']"):
            doc.remove(elem)
        for elem in doc.xpath("//field[@name='credit']"):
            doc.remove(elem)
        result['arch'] = etree.tostring(doc)
    return result

О модификаторах

Модификаторы предназначены для замены attrs и других атрибутов (readonly, required, invisible),На данный момент они существуют вместе с этими атрибутами.Причиной их введения является упрощение работы нового веб-клиента, чтобы он мог смотреть только в одном месте.Также оценка modifiers произойдет на стороне сервера, что избавит от необходимости использования интерпретатора, похожего на Python.Наконец, модификаторы конкретного синтаксиса будут: json (информация взята из https://answers.launchpad.net/openobject-server/+question/168924).

Заключение

В итоге, отвечая на ваш вопрос, что вы видитев Редактировать представление формы - это чистый XML-код представления, то же самое вы увидите в XML-файлах модулей Odoo, тогда как Представление полей get - это тот код после загрузки ипреобразован для отображения на стороне клиента.

...