gpt4 book ai didi

python - 如何在 OpenERP 中定义多公司感知模型

转载 作者:太空狗 更新时间:2023-10-30 03:04:46 26 4
gpt4 key购买 nike

我在 OpenERP 中定义了几个自定义对象,它们应该在多公司环境中使用。因此,每个对象都定义了一个“company_id”字段。这是所有设置和工作正常。只是,用户界面不是很友好,因为用户需要明确选择新对象实例应属于的公司。

company_id 字段按以下方式设置:

...
'company_id' : fields.many2one('res.company', string='Company', selection=compute_company_select, required=True)
...


def compute_company_select(self, cr, uid, context):
c_proxy = self.pool.get('res.company')

user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
search = [('id', 'child_of', user.company_id.id)]
if uid == SUPERUSER_ID:
search = [] #superuser can assign any company

ids = c_proxy.search(cr, uid, search, context=context)
return [(c.id, c.name) for c in c_proxy.browse(cr, uid, ids, context=context)]

我还可以通过使用“compute_company_select”函数中的搜索域在字段定义中简单地定义一个域表达式来解决这个问题。除了 super 用户无法分配所有公司之外,如果他没有配置为可以访问所有公司的话。

我现在要做的是在用户创建新记录时,用用户公司预填充 company_id 字段。而这似乎是不可能的。我发现了几种使用静态值或已在模块 XML 中定义的值预填充字段的可能性。但是似乎没有选项可以使用仅在运行时可用的值,即当前用户记录。

我正在使用 OpenERP 6.1。

最佳答案

官方 OpenERP 插件中的许多文档都具有类似的多公司功能,因此您大概应该重用相同的实现技术,它似乎符合您的用例。

如果您搜索"company_id""company_id.*fields.many2one",源代码中有大量示例,例如Sales Shopssale 模块中。

简而言之,您需要:

  1. company_id 字段声明为 many2oneres.company。默认 security record rules (定义 here )将负责动态地仅显示作为用户当前公司子公司的公司。用户可以随时在首选项中将他们当前的公司更改为任何他们允许的公司,以便在不同的公司环境中工作。由于安全记录规则不适用于特殊管理员用户,因此以管理员身份登录时始终可以选择任何公司。

    'company_id': fields.many2one('res.company', 'Company', required=False)
  2. 创建新记录时自动选择用户当前的公司作为默认公司。该框架提供了一种方法来实现这一点:res.company._company_default_get()。可以定义自定义规则来为每种文档选择默认公司,但默认将是用户当前的公司。因此,只需将此代码段添加到模型的 _defaults 中即可:

    'company_id': lambda self,cr,uid,ctx: self.pool['res.company']._company_default_get(cr,uid,object='<your_model>',context=ctx)
  3. company_id 字段添加到模型的表单 View 中。通常你想将它限制在 multi-company 组,只显示给真正需要它的用户:

    <field name="company_id" groups="base.group_multi_company"/>

应该就是这么简单。

关于python - 如何在 OpenERP 中定义多公司感知模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14462993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com