使用动态关系的参考字段

来自Odoo大V社-odoo中文开发手册
跳转至: 导航搜索

一个引用固定模块的常规关系字段。引用字段的类型没有限制,并且支持动态关联,所以同样的字段可以关联多个模块。

比如,我们可以使用它给To-do Tasks添加一个引用字段,这个字段可以引用User或Partner:

# class TodoTask(models.Model):
refers_to = fields.Reference([('res.users', 'User'), ('res.partner','Partner')],'Refers to')

你可以发现,字段的定义方式和Selection字段定义的方式类似,只是这里的选项列表是可使用的模块。在用户界面,用户需要先从列表中选择模块,然后再选择该模块的一条记录。

这可以灵活的配置: Referenceable Models配置表的Reference字段可以配置哪些模块可以被引用。在Setting|Technical|Database Structure(设置|技术|数据库结构)菜单中配置。当创建一条记录时,我们可以设置任何一个已经安装注册的模块,这要得益于odoo.addons.res.res_request模块的referenceable_models()函数。

使用Referenceable Models,最新的版本的引用字段是这样:

from odoo.addons.base.res.res_request import referenceable_models
# class TodoTask(models.Model):
    refers_to = fields.Reference(referenceable_models, 'Refers to')

注意,在9.0中,这个函数的拼写有些不同,并且使用的是旧API。因此,在9.0版本中,我们在使用之前,要在Python文件头部添加一些封装代码,从而使它可以像新API一样使用:

from openerp.addons.base.res import res_request
def referenceable_models(self):
    return res_request.referencable_models(self, self.env.cr, self.env.uid, context=self.env.context)
上一节:分层关系 下一节:计算字段