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>
Другие вопросы по тегам