Odoo 14社区版:如何在URL参数中添加上下文并在模型/视图中获取数据?
在Odoo中通过URL传递上下文参数到视图的方法
Odoo支持通过URL直接访问指定视图,比如示例URL:
{host}/web#id=23&action=985&model=product.template&view_type=form&cids=1&menu_id=688
会直接跳转到对应产品的表单页。如果要给自定义模型的树形视图通过URL传递上下文参数,按以下方法操作:
正确的URL参数格式
直接在URL后添加未编码的context={'my_context':'123'}会被Odoo自动移除——原因是URL中的特殊字符(如大括号、引号)会被浏览器解析为无效内容,且JSON格式要求使用双引号而非单引号。
正确的做法是对上下文JSON进行URL编码,步骤如下:
- 把上下文写成标准JSON格式:
{"my_context":"123"} - 对该字符串进行URL编码,得到:
%7B%22my_context%22%3A%22123%22%7D - 将编码后的字符串作为
context参数添加到URL中
示例完整URL:
{host}/web#action=你的动作ID&model=自定义模型名&view_type=tree&context=%7B%22my_context%22%3A%22123%22%7D&cids=1&menu_id=你的菜单ID
生成编码上下文的快捷方式
可以在浏览器开发者工具的控制台中执行以下命令,直接生成编码后的字符串:
encodeURIComponent(JSON.stringify({"my_context":"123"}))
在模型/视图中使用上下文参数
- 在视图中:比如在树形视图的domain中引用上下文:
<field name="domain">[('target_field', '=', context.get('my_context'))]</field> - 在模型方法中:通过环境上下文获取参数:
def my_method(self): my_context_val = self.env.context.get('my_context') # 后续逻辑处理
关于cids参数的说明
cids是数据库ID(Database ID),用于指定当前访问的Odoo数据库,和传递上下文参数无关,无需修改它。
内容的提问来源于stack exchange,提问作者holydragon
相关产品推荐
相关产品推荐

