fields_view_get не существует в Odoo 16
Я тестировал модули Odoo 15, которые я разработал в Odoo 16, я использовал много методов, чтобы иметь некоторые поведения для внедрения домена и контекста, прежде чем отображать компонент, но в настоящее время я не могу найти этот метод.
Кто-то здесь знает, что будет альтернативой для достижения определенного поведения во время выполнения (изменить XML с помощьюetree
компонентlxml
)?
Основная цель здесь — внедрить XML-данные, которые очень сложно добавить безenv
объект, так как сfields_views_get
Я мог вводить или делать запросы, прежде чем возвращать XML.
3 ответа
был переименован в:
становится . Поскольку он больше не возвращает описание полей, сохраняя имя в имени
fields_view_get
больше не имеет смысла. Следовательно, удалениеfields
из имени метода становитсяview_get
. Поскольку он все равно переименовывается, мы пользуемся возможностью, чтобы переименовать его.get_view
, что больше соответствует общим рекомендациям по получению/установке в мире объектов модели.
-_fields_view_get
становится_get_view
. По тем же причинам, что и выше.
-load_views
становитсяget_views
.
Вы можете найти более подробную информацию в рефакторинге fields_view_get, load_views commit
В измененных файлах вы можете увидеть пример фиксации diff модели 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):
метод field_views_get был переименован в get_view в Odoo 16.0. Этот метод возвращает поля_представлений данных представлений вместе с полями текущей модели и, при необходимости, ее фильтрами для данного действия. Вы можете использовать этот метод для изменения представления XML перед его отрисовкой, точно так же, как вы это делали с field_views_get в Odoo 15.0.
Например, если вы хотите внедрить домен и контекст в поле представления формы, вы можете переопределить метод get_view в своей модели и использовать компонент etree lxml для управления представлением 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
Здравствуйте, базовые представления обычно имеют общую структуру, определенную ниже. Заполнители обозначаются заглавными буквами:
<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>