Python 在Odoo的一般设置中添加

Python 在Odoo的一般设置中添加,python,python-2.7,odoo-8,Python,Python 2.7,Odoo 8,我写的是定制的Odoo模块,带有一些用户可以设置的配置。 我想在 设置->配置->常规设置 因此,我创建了一个.py,其中包含: from openerp.osv import fields, osv class mymodule_configuration(osv.osv_memory): _inherit = 'res.config.settings' 'test_field': fields.char( string='Test

我写的是定制的Odoo模块,带有一些用户可以设置的配置。 我想在
设置->配置->常规设置

因此,我创建了一个.py,其中包含:

from openerp.osv import fields, osv

class mymodule_configuration(osv.osv_memory):
   _inherit = 'res.config.settings'

  'test_field': fields.char(
                       string='Test Field',
                       required=True,
                             )
.XML

<record id="custom_id" model="ir.ui.view">
   <field name="name">General Settings</field>
   <field name="model">res.config.settings</field>
   <field name="arch" type="xml">
      <form string="General">
         <field name="test_field"/>
      </form>
   </field>
</record>

一般设置
res.config.settings
它不会更改常规设置

如果我添加引用id,如:

<field name="inherit_id" ref="base_setup.view_general_configuration"/>

然后我得到了错误

ParseError:“ValidateError” 字段
arch
违反约束失败:视图定义无效

错误详细信息: 字段
模块门户
不存在


有人能帮我解决这个问题吗?

您不能直接将字段添加到现有视图中。 你应该试试这个

<record id="custom_id" model="ir.ui.view">
    <field name="name">General Settings</field>
    <field name="model">res.config.settings</field>
    <field name="inherit_id" ref="base_setup.view_general_configuration"/>
    <field name="priority" eval="50" />
    <field name="arch" type="xml">
        <data>
            <div name="Existing div name" position="inside">
                <div name="new div name">
                    <field name="test_field" class="oe_inline" />
                    <label for="test_field"/>
                </div>
            </div>
        </data>
    </field>
</record>

一般设置
res.config.settings

不能将字段直接添加到现有视图中。 你应该试试这个

<record id="custom_id" model="ir.ui.view">
    <field name="name">General Settings</field>
    <field name="model">res.config.settings</field>
    <field name="inherit_id" ref="base_setup.view_general_configuration"/>
    <field name="priority" eval="50" />
    <field name="arch" type="xml">
        <data>
            <div name="Existing div name" position="inside">
                <div name="new div name">
                    <field name="test_field" class="oe_inline" />
                    <label for="test_field"/>
                </div>
            </div>
        </data>
    </field>
</record>

一般设置
res.config.settings

在Odoo中定义自定义设置

不幸的是,Odoo文档似乎没有包含任何关于向Odoo添加新配置选项的信息

定义模型

首先,您需要定义一个从
res.config.settings
继承的新模型:

class YourSettings(models.TransientModel):
    _inherit = 'res.config.settings'
    _name = 'your.config.settings'
它是一个
TransientModel
,也称为向导。不要期望它永久保存值。TransientModels本质上只是临时存储值。您需要其他方法使其永久化

幸运的是,
res.config.settings使这变得很容易。首先,您需要将一些字段添加到您的
TransientModel`-每个要定义的设置选项都有一个字段。Odoo内置了对四种不同设置的支持。它根据字段名称区分它们

默认设置

名为
default\u foo
的字段的值将设置为作为
default\u model
参数给定的模型上名为
foo
的字段的默认值

class YourSettings(models.TransientModel):
    _inherit = 'res.config.settings'
    _name = 'your.config.settings'

    default_name = fields.Char(default_model='your.other.model')
这将使
default\u name
字段的值成为model
your.other.model
中字段
name
的全局默认值

“组”设置

名为
group\u foo
的布尔字段有两个参数:
group
(默认为
base.group\u user
)和
隐含组
。如果此类字段的值为真,则在组中定义的组将获得所有
隐含组
的权限。这与将组添加到另一个组对象的
隐含组ID
字段完全相同(据我所知,这也是未记录的功能)。这有助于控制哪些用户组可以访问功能

class YourSettings(models.TransientModel):
    _inherit = 'res.config.settings'
    _name = 'your.config.settings'

    group_kill = fields.Boolean(
        group='your.secret_agents',
        implied_group='your.licence_to_kill'
    )
模块设置

启用名为
module\u foo
的布尔字段时,将触发名为
foo
的模块的安装

class YourSettings(models.TransientModel):
    _inherit = 'res.config.settings'
    _name = 'your.config.settings'

    # if enabled will install "spies" module
    module_spies = fields.Boolean()
其他设置

默认情况下,其他字段的值将被丢弃,但您可以通过实现自己的保存方法来更改这些值。只需定义一个名为
set\u foo
(其中
foo
是任意字符串)的方法即可。您还可以使用
get\u default\u foo
方法设置此类字段的初始值(foo的确切形式再次与此无关)

例如,如果要使用设置控制链接到当前用户的公司的名称和电话号码:

class YourSettings(models.TransientModel):
    _inherit = 'res.config.settings'
    _name = 'your.config.settings'

    company_name = fields.Char()
    company_phone = fields.Char()

    @api.model
    def get_default_company_values(self, fields):
    """
    Method argument "fields" is a list of names
    of all available fields.
    """
        company = self.env.user.company_id
        return {
            'company_name': company.name,
            'company_phone': company.phone,
        }

    @api.one
    def set_company_values(self):
        company = self.env.user.company_id
        company.name = self.company_name
        company.phone = self.company_phone
定义视图

然后,您只需要为设置定义一个视图。让我们使用上一个示例:

<record id="your_configuration" model="ir.ui.view">
    <field name="name">Your configuration</field>
    <field name="model">your.config.settings</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>
                        <label for="company_name"/>
                        <field name="company_name"/>
                    </div>
                    <div>
                        <label for="company_phone"/>
                        <field name="company_phone"/>
                    </div>
                </div>
            </group>
        </form>
    </field>
</record>

<record id="your_settings_action" model="ir.actions.act_window">
    <field name="name">Your configuration</field>
    <field name="res_model">your.config.settings</field>
    <field name="view_id" ref="your_configuration"/>
    <field name="view_mode">form</field>
    <field name="target">inline</field>
</record>

您的配置
您的.config.settings
或
您的配置
您的.config.settings
类型
内联
当然,不要忘记在“设置”菜单中添加一个新条目:

<menuitem id="your_settings_menu" name="Your settings"
    parent="base.menu_config" action="your_settings_action"/>


参考资料:

在Odoo中定义自定义设置

不幸的是,Odoo文档似乎没有包含任何关于向Odoo添加新配置选项的信息

定义模型

首先,您需要定义一个从
res.config.settings
继承的新模型:

class YourSettings(models.TransientModel):
    _inherit = 'res.config.settings'
    _name = 'your.config.settings'
它是一个
TransientModel
,也称为向导。不要期望它永久保存值。TransientModels本质上只是临时存储值。您需要其他方法使其永久化

幸运的是,
res.config.settings使这变得很容易。首先,您需要将一些字段添加到您的
TransientModel`-每个要定义的设置选项都有一个字段。Odoo内置了对四种不同设置的支持。它根据字段名称区分它们

默认设置

名为
default\u foo
的字段的值将设置为作为
default\u model
参数给定的模型上名为
foo
的字段的默认值

class YourSettings(models.TransientModel):
    _inherit = 'res.config.settings'
    _name = 'your.config.settings'

    default_name = fields.Char(default_model='your.other.model')
这将使
default\u name
字段的值成为model
your.other.model
中字段
name
的全局默认值

“组”设置