I want to create a page look like general setting page in odoo and i have found that I have to use TransientModel class but I have so many fields with many2one relation that is forbidden with TransientModel
I have used TransientModel class but i got error because I used Many2one relation in my code
<record id="your_configuration" model="ir.ui.view">
<field name="name">Your configuration</field>
<field name="model">matab.settingtag</field>
<field name="arch" type="xml">
<form string="Your configuration" class="oe_form_configuration">
<header>
<button string="Save" type="object"
name="execute" class="oe_highlight"/>
or
<button string="Cancel" type="object"
name="cancel" class="oe_link"/>
</header>
<group string="Company">
<!--<label for="id" string="Name & Phone"/>-->
<div>
<div>
<field name="active_units"/>
</div>
<div>
<field name="doctor_working_hour_time_control"/>
</div>
</div>
</group>
</form>
</field>
</record>
I want a setting page that open directly and save correctly look like general setting in odoo- i have to use many2one relation in my modules
The Way Odoo 12 handles this is to create the fields on the company_id, then create a related field in the settings.
class ResCompany(models.Model)
_inherit = 'res.company'
many2one_field = fields.Many2one('related.model', 'Field Name')
#Edit for non many2one field setting
related_default_value_duration = fields.Float(string='Duration', default=0.25)
@api.model
def get_values(self):
res = super(ResConfigSettings, self).get_values()
res['related_default_value_duration'] = float(self.env['ir.config_parameter'].sudo().get_param('settingtag.related_default_value_duration', default=0.25))
return res
@api.model
def set_values(self):
self.env['ir.config_parameter'].sudo().set_param('settingtag.related_default_value_duration', self.max_time)
super(ResConfigSettings, self).set_values()
class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
many2one_field = fields.Many2one('related.model', 'Field Name', related='company_id.many2one_field')
Then you should be able to add it to your settings view.
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Add in configuration items -->
<record id="res_config_view_name_form" model="ir.ui.view">
<field name="name">res.config.view.name.form</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="base.res_config_settings_view_form" />
<field name="arch" type="xml">
<xpath expr="//div[hasclass('settings')]" position="inside">
<div class="app_settings_block" data-string="Module Name" string="Module Name" data-key="module_name" groups="">
<h2>Title of Group of Settings</h2>
<div class="row mt16 o_settings_container">
<div class="col-12 col-lg-12 o_setting_box">
<div class="o_setting_right_pane">
<span class="o_form_label">Field Name</span>
<div>
<field name="many2one_field " class="oe_inline"/>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>
Please note that "module_name" needs to be the name of the directory (same as in an external id for a view)
*****IMPORTANT*****
Please note that if you are running in Multi Company these fields will need to be set for each company individually.