Odoo 16 如何创建可指定公司打开的记录链接?
解决Odoo中生成指定公司记录链接的权限问题
问题描述
我希望创建一个能直接打开指定公司的链接。目前使用base_url生成记录链接时,该链接会在当前公司环境下打开,从而触发权限错误。
参考原代码:
def make_record_link(self, record='', action='', menu=''): link = '' record = record or self if record: ir_param = self.env['ir.config_parameter'].sudo() base_url = ir_param.get_param('web.base.url') if base_url: base_url += '/web#&model=%s&id=%s' % (record._name,record.id) link = '<a href="'+base_url+'">'+record.name+'</a>' return str(link)
解决方案
Odoo的Web界面支持通过URL参数c指定目标公司ID,只需在生成的链接中添加该参数,就能直接切换到对应公司环境,避免权限错误。
修改后的代码如下:
def make_record_link(self, record='', action='', menu='', company_id=None): link = '' record = record or self if record: ir_param = self.env['ir.config_parameter'].sudo() base_url = ir_param.get_param('web.base.url') if base_url: # 拼接基础记录链接 base_url += '/web#&model=%s&id=%s' % (record._name, record.id) # 传入公司ID时,追加c参数指定目标公司 if company_id: base_url += '&c=%s' % company_id # 按需追加动作、菜单参数 if action: base_url += '&action=%s' % action if menu: base_url += '&menu_id=%s' % menu link = '<a href="%s">%s</a>' % (base_url, record.name) return str(link)
代码说明
- 新增
company_id参数,用于传入目标公司的ID值 - URL中的
c参数是Odoo官方支持的会话公司指定参数,打开链接时会自动切换到该公司上下文 - 保留原有的
action和menu参数,可按需补充到链接中
使用示例
生成指向ID为2的公司下某销售订单的链接:
# 假设order是目标销售订单记录,company_id=2为指定公司ID link = self.make_record_link(record=order, company_id=2)
内容的提问来源于stack exchange,提问作者Moaz Mabrok
相关产品推荐
相关产品推荐

