Odoo 11 开发人员菜单中的“字段视图获取”选项是什么?

我正在尝试使用开发人员模式和可以使用错误符号打开的菜单来调试模块。如果您想查看表单的源代码,有一个菜单项“编辑表单视图”非常方便。还有菜单项“字段视图获取”,它以略有不同的方式显示相同的表单。


我不明白多余的物品来自哪里。字段定义中有几个附加属性,通常还有项修饰符="{...}"。


这些附加属性从何而来?


来自定义合作伙伴的表单的示例代码:


字段视图获取


<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>


潇湘沐
浏览 398回答 1
1回答

慕田峪4524236

关于字段 view_getOdoo 的每个模型都有一个fields_view_get可以覆盖的方法。一旦加载了视图的 XML 代码并且在呈现为 HTML 之前,就会执行此方法。这意味着您可以在视图中进行一些动态修改。寻找def fields_view_get在Odoo模块,你会发现很多的情况下。一个例子:@api.modeldef fields_view_get(self, view_id=None, view_type='form', toolbar=False,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; submenu=False):&nbsp; &nbsp; result = super(AccountMoveLine, self).fields_view_get(view_id,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; view_type,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; toolbar=toolbar,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; submenu=submenu)&nbsp; &nbsp; doc = etree.XML(result['arch'])&nbsp; &nbsp; if view_type == 'tree' and self._module == 'account_payment_order':&nbsp; &nbsp; &nbsp; &nbsp; if not doc.xpath("//field[@name='balance']"):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for placeholder in doc.xpath(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "//field[@name='amount_currency']"):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elem = etree.Element(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'field', {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'name': 'balance',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'readonly': 'True'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; orm.setup_modifiers(elem)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; placeholder.addprevious(elem)&nbsp; &nbsp; &nbsp; &nbsp; if not doc.xpath("//field[@name='amount_residual_currency']"):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for placeholder in doc.xpath(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "//field[@name='amount_currency']"):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elem = etree.Element(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'field', {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'name': 'amount_residual_currency',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'readonly': 'True'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; orm.setup_modifiers(elem)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; placeholder.addnext(elem)&nbsp; &nbsp; &nbsp; &nbsp; if not doc.xpath("//field[@name='amount_residual']"):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for placeholder in doc.xpath(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "//field[@name='amount_currency']"):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; elem = etree.Element(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'field', {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'name': 'amount_residual',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'readonly': 'True'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; orm.setup_modifiers(elem)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; placeholder.addnext(elem)&nbsp; &nbsp; &nbsp; &nbsp; # Remove credit and debit data - which is irrelevant in this case&nbsp; &nbsp; &nbsp; &nbsp; for elem in doc.xpath("//field[@name='debit']"):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; doc.remove(elem)&nbsp; &nbsp; &nbsp; &nbsp; for elem in doc.xpath("//field[@name='credit']"):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; doc.remove(elem)&nbsp; &nbsp; &nbsp; &nbsp; result['arch'] = etree.tostring(doc)&nbsp; &nbsp; return result关于修饰符修饰符旨在替换attrs和其他属性(readonly、required、invisible)。目前,它们与这些属性并存。引入它们的原因是为了简化新的 Web 客户端,使其只能查看一个地方。评估也modifiers将发生在服务器端,放弃对 python(类似)解释器客户端的需求。最后,修饰符的具体语法将是json(信息取自https://answers.launchpad.net/openobject-server/+question/168924)。结论总之,回答您的问题,您在编辑表单视图中看到的是视图的纯 XML 代码,与您在 Odoo 模块的 XML 文件中看到的相同,而字段视图获取的是加载并转换为后的代码在客户端呈现。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python