You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 21:52:41