如何在Odoo中基于登录域名动态修改公司名称?
Odoo基于登录域名动态修改公司名称解决方案
一、是否需要自定义模块?
Odoo没有内置基于登录域名动态修改公司名称的功能,必须通过自定义模块实现。
二、自定义模块实现步骤及代码示例
1. 模块基础结构
创建如下目录结构的自定义模块:
custom_domain_company_name/ ├── __init__.py ├── __manifest__.py ├── controllers/ │ ├── __init__.py │ └── main.py └── models/ ├── __init__.py └── res_company.py
2. 模块配置文件(manifest.py)
{ 'name': '动态域名公司名称', 'version': '1.0', 'author': '自定义开发者', 'category': 'Tools', 'depends': ['base', 'web'], 'data': [], 'installable': True, 'auto_install': False, }
3. 重写公司模型计算显示名称的方法(models/res_company.py)
通过请求上下文获取当前域名,动态替换公司显示名称:
from odoo import models, api from odoo.http import request class ResCompany(models.Model): _inherit = 'res.company' @api.depends_context('request') def _compute_display_name(self): super()._compute_display_name() if not request: return host = request.httprequest.host # 配置域名与目标公司名称的映射 domain_name_map = { 'company_1.com': 'Company 1', 'company_2.com': 'Company 2' } if host in domain_name_map: self.display_name = domain_name_map[host]
4. 前端控制器适配(controllers/main.py,可选)
确保前端导航栏能正确获取动态更新的名称:
from odoo import http from odoo.http import request class Home(http.Controller): @http.route('/', type='http', auth="none") def index(self, **kw): return request.render('web.webclient_bootstrap', qcontext={}) @http.route('/web', type='http', auth="user") def web_client(self, s_action=None, **kw): return request.render('web.webclient_bootstrap', qcontext={})
5. 安装与测试
- 将模块放入Odoo的addons目录
- 刷新模块列表,安装该模块
- 分别通过
company_1.com、company_2.com登录系统,验证导航栏的公司名称是否动态切换
注意事项
- 需确保服务器已完成多域名解析,所有目标域名指向同一个Odoo实例
- 若要支持子域名,可修改
domain_name_map的匹配逻辑,比如使用正则表达式匹配域名前缀 - 如需同时切换当前登录用户的关联公司,可在代码中添加
request.env.user.company_id = 对应公司记录的逻辑
内容的提问来源于stack exchange,提问作者Sandun Tharaka
相关产品推荐
相关产品推荐

