1 回答
TA贡献1875条经验 获得超5个赞
关于字段 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)。目前,它们与这些属性并存。引入它们的原因是为了简化新的 Web 客户端,使其只能查看一个地方。评估也modifiers将发生在服务器端,放弃对 python(类似)解释器客户端的需求。最后,修饰符的具体语法将是json(信息取自https://answers.launchpad.net/openobject-server/+question/168924)。
结论
总之,回答您的问题,您在编辑表单视图中看到的是视图的纯 XML 代码,与您在 Odoo 模块的 XML 文件中看到的相同,而字段视图获取的是加载并转换为后的代码在客户端呈现。
添加回答
举报
