Как я могу создать страницу настроек (как общие настройки) в одних отношениях с Many2one? - PullRequest
1 голос
/ 15 мая 2019

Я хочу создать страницу, похожую на страницу общих настроек в odoo, и я обнаружил, что должен использовать класс TransientModel, но у меня так много полей с отношением many2one, которое запрещено TransientModel

Я использовал класс TransientModel, но получил ошибку, потому что я использовал отношение 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 в моих модулях

1 Ответ

0 голосов
/ 20 мая 2019

Способ, которым 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>

Обратите внимание, что "имя_модуля" должно быть именем каталога (так же, как во внешнем идентификаторе для представления)

***** ВАЖНО *****

Обратите внимание, что если вы работаете в многопрофильной компании, эти поля необходимо будет установить для каждой компании отдельно.

...