Odoo 17 Development Book - Custom Settings

Custom Settings

The ability to configure specific settings may be required by the user on occasion. Odoo now has more configuration options. Let's discuss about how to add a custom setting to our custom module in this section.

Consider a model that keeps an extensive student record database. Some organisations may require you to email them whenever a new student is created. However, not all of them may have the same requirements. Let's create a setting that lets us choose whether to enable the feature. To do so, create a model for storing student records as well as a module called education_organization.


from odoo import fields, models
class Student(models.Model):
   _name = "student.student"
   _description = "Student"
   name = fields.Char(string="Name", required=True)
   phone = fields.Char(string="Phone Number")
   email = fields.Char(string="Email", required=True)
                             

The student model only includes the most basic fields. To add a custom settings option, we'll need to inherit the res.config.settings model.


class ResConfigSettings(models.TransientModel):
   _inherit = 'res.config.settings'
   # mail send configurator
   send_mail = fields.Boolean(string="Notify Student", default=True,
                              help="Check to Send a mail to Student on "
                                   "creating a Student")
                             

Add a new menu called Settings to the Configuration menu, and then specify the action.

Action record


<record id="res_config_settings_menu_action" model="ir.actions.act_window">
   <field name="name">Settings<field>
   <field name="type">ir.actions.act_window<field>
   <field name="res_model">res.config.settings<field>
   <field name="view_mode">form<field>
   <field name="target">inline<field>
   <field name="context">{'module' : 'education_organisation'}<field>
<record>
                             

When creating an action record, keep the context in mind. In the context of action,{'module': 'education_organization'} must be passed.

Let's look at how we can use the form view of res.config.settings to display the custom field.


<record id="res_config_settings_view_form" model="ir.ui.view">
   <field name="name">res.config.settings.view.form.inherit.organisation
   </field>
   <field name="model">res.config.settings</field>
   <field name="priority" eval="45"/>
   <field name="inherit_id" ref="base.res_config_settings_view_form"/>
   <field name="arch" type="xml">
       <xpath expr="//form" position="inside">
           <div class="app_settings_block" data-string="Education Organisation"
                string="Education Organisation" data-key="education_organisation">
               <h2>Education Organisation</h2>
               <div class="row mt16 o_settings_container">
                   <div class="col-xs-12 col-md-6 o_setting_box">
                       <div class="o_setting_left_pane">
                           <field name="send_mail"/>
                       </div>
                       <div class="o_setting_right_pane">
                           <label for="send_mail"/>
                           <div class="text-muted">
                               Check to Send a mail to Student on creating
                               a Student
                           </div>
                       </div>
                   </div>
               </div>
           </div>
       </xpath>
   </field>
</record>
                             

Custom setting looks like.

odoo-development

Also, we can add the custom settings with the module web icon.


   <record id="res_config_settings_view_form" model="ir.ui.view">
   <field name="name">res.config.settings.view.form.inherit.organisation
   </field>
   <field name="model">res.config.settings</field>
   <field name="priority" eval="45"/>
   <field name="inherit_id" ref="base.res_config_settings_view_form"/>
   <field name="arch" type="xml">
       <xpath expr="//form" position="inside">
           <app data-string="Education Organization"
                id="EducationOrganization" string="Education Organization"
                name="visa_application">
               <block title="Email" id="education_org">
                       <div class="row mt16 o_settings_container">
                           <div class="col-xs-12 col-md-6 o_setting_box">
                               <div class="o_setting_left_pane">
                                   <field name="send_mail"/>
                               </div>
                               <div class="o_setting_right_pane">
                                   <label for="send_mail"/>
                                   <div class="text-muted">
                                       Check to Send a mail to     Student on
                                       creating
                                       a Student
                                   </div>
                               </div>
                           </div>
                       </div>
               </block>
           </app>
       </xpath>
   </field>
</record>
   
odoo-development

Keep in mind that the model res.config.settings is a transient model. That is, the model's data are not database-persistent. As a result, we'll need to write a few more functions to store and retrieve data for the view.

whatsapp
location

Calicut

Cybrosys Technologies Pvt. Ltd.
Neospace, Kinfra Techno Park
Kakkancherry, Calicut
Kerala, India - 673635

location

Kochi

Cybrosys Technologies Pvt. Ltd.
1st Floor, Thapasya Building,
Infopark, Kakkanad,
Kochi, India - 682030.

location

Bangalore

Cybrosys Techno Solutions
The Estate, 8th Floor,
Dickenson Road,
Bangalore, India - 560042

Send Us A Message