fields_view_get 在 Odoo 16 中不存在

问题描述 投票:0回答:3

我正在测试我在Odoo 16中开发的Odoo 15模块,我使用了很多方法

fields_views_get
来具有一些行为来注入域和上下文,然后渲染组件,但目前我找不到这个方法。

这里有人知道在运行时实现某些行为的替代方法是什么(使用

etree
lxml
组件修改 XML)?

这里的主要目标是注入 XML 数据,如果没有

env
对象,很难添加这些数据,因为使用
fields_views_get
我能够在返回 XML 之前注入或进行查询。

javascript python odoo odoo-16
3个回答
3
投票

fields_view_get
更名为
get_view

fields_view_get
变为
get_view
。 由于它不再返回字段描述, 将
fields
保留在
fields_view_get
名称中不再有意义。 因此从方法名称中删除
fields
,它就变成了
view_get
。 无论如何,它被重命名了,我们借此机会重命名它
get_view
, 这更符合一般的 getter/setter 指南 在模型对象世界中。
-
_fields_view_get
变为
_get_view
。出于与上述相同的原因。
-
load_views
变为
get_views

您可以在 refactor fields_view_get, load_views commit

中找到更多详细信息

在更改的文件中,您可以看到 res_users 模型的提交差异示例,它替换为:

def fields_view_get(self, view_id=None, view_type='form', toolbar=False, submenu=False):

与:

def get_view(self, view_id=None, view_type='form', **options):

0
投票

基本视图通常共享下面定义的通用结构。占位符全部大写:

<record id="MODEL_view_TYPE" model="ir.ui.view">
  <field name="name">NAME</field>
  <field name="model">MODEL</field>
  <field name="arch" type="xml">
    <VIEW_TYPE>
      <VIEW_SPECIFICATIONS/>
    </VIEW_TYPE>
  </field>
</record>

0
投票

在 Odoo 16.0 中,fields_views_get 方法已重命名为 get_view。此方法返回给定视图的 fields_views,以及当前模型的字段,以及可选的给定操作的过滤器。您可以使用此方法在渲染 XML 视图之前对其进行修改,就像在 Odoo 15.0 中使用 fields_views_get 所做的那样。

例如,如果要向表单视图中的字段注入域和上下文,可以重写模型中的 get_view 方法并使用 lxml 的 etree 组件来操作 XML 视图。这是示例代码:

from odoo import models
from lxml import etree

class TestModel(models.Model):
_name = "test.model"
_inherit = "test.model"

def get_view(self, views, options=None):
# call super to get the original view
result = super().get_view(views, options)
# loop through the views
for view in result.get("fields_views", {}).values():
# check if the view type is form
if view["type"] == "form":
# parse the XML view
doc = etree.XML(view["arch"])
# find the field that you want to modify
field = doc.xpath("//field[@name='your_field_name']")
if field:
# inject your domain and context
field[0].set("domain", "[('your_domain', '=', True)]")
field[0].set("context", "{'your_context': 'value'}")
# update the view arch with the modified XML
view["arch"] = etree.tostring(doc, encoding="unicode")
return result
© www.soinside.com 2019 - 2024. All rights reserved.