Odoo - Почему odoo хранит данные TransientModel, такие как res.config.settings, в ir.config_parameter?

res.config.settings Модель TransientModel и TransientModel предназначены для хранения временных данных. Через некоторое время она будет удалять данные из базы данных. Для сохранения этих настроек мы должны реализовать set_param и get_param метод ir.config_parameter.

Итак, здесь я хочу знать, почему odoo использовал ir.config_parameter для хранения этих значений настроек. Почему мы не можем сделать res.config.settings как Model вместо TransientModel и хранить данные в этой модели.


person user_5888677    schedule 22.11.2019    source источник


Ответы (1)


Я не одоо, поэтому не могу ответить за них, но могу объяснить вам, почему я считаю эту логику.

В odoo у вас есть традиционная парадигма MVC, но есть места, где у вас действительно нет модели: вам просто нужно представление и контроллер. Так обстоит дело с мастерами в odoo. Мастера - это просто вспомогательные диалоги, позволяющие пользователю выполнять сложные задачи более простым способом.

Однако, если у них нет модели, как определить данные, которые они используют? Куда прикрепить логику контроллера? Это было бы очень сложно и потребовало бы совершенно новой парадигмы программирования внутри odoo, поэтому они выбрали более простое решение: переходные модели.

Итак, в odoo временная модель - это, по сути, мастер. Что происходит, когда вы открываете мастер?

  1. Odoo получает определение представления.
  2. Вызывает контроллер для получения данных по умолчанию (default_get()).
  3. Рисует вам форму, но в базе данных еще нет записи.
  4. Вы можете изменить форму как обычно, и обычные методы вычислений и onchange работают из коробки.
  5. Вы нажимаете какую-то кнопку в мастере, чтобы выполнить какое-либо действие.
  6. Odoo создает новую запись в таблице мастера.
  7. Метод, связанный с этой кнопкой, выполняется на сервере.

В следующий раз, когда вы откроете мастер, он выполнит ту же процедуру. Как вы понимаете, при этом создается много записей, потому что запись мастера всегда используется только один раз, поэтому есть задание cron, которое время от времени удаляет этот мусор. Вот почему их называют «временными».

Цель ir.config_parameter - хранить и извлекать конфигурацию всей базы данных. 1 запись = 1 параметр. Вы можете создавать параметры без использования мастера. Они не временные, поэтому это подходящее место для хранения параметров.

Цель res.config.settings - помочь вам настроить систему, но это больше, чем просто хранение параметров системы: он включает в себя настройку методов аутентификации, установку модулей, предоставление вам ярлыков для настройки почтовых шлюзов, установку темы на каждом веб-сайте, выбор плана счетов для каждой компании и т. д.

Нет смысла объединять все это в ir.config_parameter.

person Yajo    schedule 24.11.2019