我如何在 odoo-witj Many2one 关系中创建一个设置页面(类似于一般设置)
How can i create a setting page (alike general setting) in odoo- witj Many2one relation
我想在 odoo 中创建一个看起来像常规设置页面的页面,我发现我必须使用 TransientModel class 但是我有很多字段具有 Many2one 关系,TransientModel 禁止使用
我使用了 TransientModel class 但我得到了错误,因为我在我的代码中使用了 Many2one 关系
<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>
我想要一个可以直接打开并正确保存的设置页面,看起来像 odoo 中的一般设置-我必须在我的模块中使用 many2one 关系
Odoo 12 处理此问题的方式是在 company_id 上创建字段,然后在设置中创建相关字段。
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')
然后您应该可以将它添加到您的设置视图中。
<?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>
请注意 "module_name" 必须是目录的名称(与视图的外部 ID 相同)
*****重要事项*****
请注意,如果您 运行 在多家公司中,则需要为每个公司单独设置这些字段。
我想在 odoo 中创建一个看起来像常规设置页面的页面,我发现我必须使用 TransientModel class 但是我有很多字段具有 Many2one 关系,TransientModel 禁止使用
我使用了 TransientModel class 但我得到了错误,因为我在我的代码中使用了 Many2one 关系
<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>
我想要一个可以直接打开并正确保存的设置页面,看起来像 odoo 中的一般设置-我必须在我的模块中使用 many2one 关系
Odoo 12 处理此问题的方式是在 company_id 上创建字段,然后在设置中创建相关字段。
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')
然后您应该可以将它添加到您的设置视图中。
<?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>
请注意 "module_name" 必须是目录的名称(与视图的外部 ID 相同)
*****重要事项*****
请注意,如果您 运行 在多家公司中,则需要为每个公司单独设置这些字段。