我如何在 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 &amp; 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 相同)

*****重要事项*****

请注意,如果您 运行 在多家公司中,则需要为每个公司单独设置这些字段。