user_5888677
user_5888677

Reputation: 85

Odoo - Why odoo store data of TransientModel like res.config.settings into ir.config_parameter?

res.config.settings model is TransientModel and TransientModel are designed to be stored temporary data, After periodically time it will remove data from the database. For saving those settings we have to implement set_param and get_param method of ir.config_parameter.

So, Here I want to know why odoo used ir.config_parameter to store those setting values. Why we can't make res.config.settings as Model instead of TransientModel and store data into that model.

Upvotes: 2

Views: 1046

Answers (1)

Yajo
Yajo

Reputation: 6458

I'm not odoo so I cannot answer for them, but I can explain you why I consider this logic.

In odoo, you have the traditional MVC paradigm, but there are places where you don't really have a model: you just want a view and a controller. This is the case for wizards in odoo. Wizards are just helper dialogs to let the user perform hard tasks in an easier way.

However, if they have no model, how to define the data they use? Where to attach controller logic? It would be very hard and would request a whole new programming paradigm inside odoo, so they took an easier solution: transient models.

So in odoo a transient model is basically a wizard. What happens when you open a wizard?

  1. Odoo obtains the view definition.
  2. Calls the controller to obtain default data (default_get()).
  3. Draws a form for you, but there's no record yet in the database.
  4. You can alter the form as usual, and the normal compute and onchange methods work out of the box.
  5. You hit some button in the wizard, to perform any action.
  6. Odoo creates a new record in the wizard table.
  7. The method associated with that button is executed in the server.

The next time you open the wizard, it follows the same procedure. As you can imagine, this creates a lot of records, because a wizard record is always used only once, so there's a cron job that deletes that garbage every now and then. That's why they're called "transient".

The purpose of ir.config_parameter is to store and retrieve database-wide configuration. 1 record = 1 parameter. You can create parameters without using a wizard. These are not transient, so it's the proper place to store parameters.

The purpose of res.config.settings is to help you configure the system, but that's more than just storing system parameters: it involves configuring auth methods, installing modules, giving you shortcuts for mail gateways configuration, installing a theme in each website, choosing a chart of accounts for each company, etc.

It would make no sense to merge all of that in ir.config_parameter.

Upvotes: 1

Related Questions