Odoo10模块的设置功能开发

Settings

General Settings

 

Odoo文本图像块

为自己的模块提供设置选项

1-模型

    我们要定义自己的模型,父类为TransientModel,扩展自“base.config.settings”。

解释一下父类,设置的内容虽然是存储在数据库中的,但是不像通常的业务单据那样存储,是存储在ir.config_parameter中的。所以,我们定义的模型就不需要用Model作父类了。

    为什么要扩展自base.config.settings呢?因为在这个教程中,我们将设置选项放到系统的General Settings中,见上图。

    接下来说到字段的定义。我们这里要实现的选项是普通的,所以定义的时候要排除以下三种情况:将字段定义成default_XXX,group_XXX,module_XXX。

    接下来是设置选项的已设置值(对应的动作:读取数据库中的值)和新设置值(对应的动作:保存到数据库中)


2-代码

    知识点来来源于源代码,下面是重点:

*   For the other fields, the method ``execute`` invokes all methods with a name
            that starts with 'set_'; such methods can be defined to implement the effect
            of those fields.
        The method ``default_get`` retrieves values that reflect the current status of the
        fields like 'default_XXX', 'group_XXX' and 'module_XXX'. It also invokes all methods
        with a name that starts with 'get_default_'; such methods can be defined to provide
        current values for other fields.

    上面的注释的意思是对于普通字段(非default、group、module做前缀),设置方法以set_为前缀,获取方法以get_default_为前缀。


3-视图

    Odoo10的设置视图样式有点特别,写的时候通常使用如下的方式:

<group name="authentication">
    <label for="id" string="Authentication"/>
    <div>
       <div>
           <field name="module_auth_oauth"/>
           <label for="module_auth_oauth"/>
       </div>
    </div>
</group>


4-实例

class BaseConfigSettings(models.TransientModel):
    _inherit = 'base.config.settings'
   
auth_signup_reset_password = fields.Boolean(string='Enable password reset from Login page', help="This allows users to trigger a password reset from the Login page.")
    auth_signup_uninvited = fields.Boolean(string='Allow external users to sign up', help="If unchecked, only invited users may sign up.")
    auth_signup_template_user_id = fields.Many2one('res.users', string='Template user for new users created through signup')
   
@api.model
    def get_default_auth_signup_template_user_id(self, fields):
        IrConfigParam = self.env['ir.config_parameter']
        # we use safe_eval on the result, since the value of the parameter is a nonempty string
        return {
            'auth_signup_reset_password': safe_eval(IrConfigParam.get_param('auth_signup.reset_password', 'False')),
            'auth_signup_uninvited': safe_eval(IrConfigParam.get_param('auth_signup.allow_uninvited', 'False')),
            'auth_signup_template_user_id': safe_eval(IrConfigParam.get_param('auth_signup.template_user_id', 'False')),
        }
    @api.multi
    def set_auth_signup_template_user_id(self):
        self.ensure_one()
        IrConfigParam = self.env['ir.config_parameter']
        # we store the repr of the values, since the value of the parameter is a required string
        IrConfigParam.set_param('auth_signup.reset_password', repr(self.auth_signup_reset_password))
        IrConfigParam.set_param('auth_signup.allow_uninvited', repr(self.auth_signup_uninvited))
        IrConfigParam.set_param('auth_signup.template_user_id', repr(self.auth_signup_template_user_id.id))




    

留下评论

你应该 登入 张贴评论