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

如何在Odoo 16中从表单视图传递Context到Python变量?

Odoo 16 上下文(Context)获取与更新问题解决方案

一、视图中Context的作用误区

你在视图字段上设置的context仅作用于该字段的特定交互场景,比如:

  • 点击字段下拉框时过滤选项
  • 从该字段创建关联记录时传递上下文
  • 打开字段的关联视图时携带参数

它不会自动全局注入到模型的env.context中。比如你在journal_id字段设置context={'journal_id':7},只有在操作这个字段时该上下文才生效,打开表单时全局env.context不会包含这个值。

二、正确获取上下文的方式

1. 直接读取字段值(推荐)

如果你的目标是获取当前银行对账单的journal_id,不需要从上下文取,直接读取模型字段即可:

journal_id = self.journal_id.id if self.journal_id else False

2. 传递上下文到目标场景

如果确实需要传递上下文到模型方法或子记录:

(1)在One2Many字段传递父记录值

修改视图中line_ids的tree上下文,传递父记录的journal_id:

<tree string="Bank Statement Lines" editable="bottom" context="{'o2m_active_model': 'account.bank.statement', 'parent_journal_id': parent.journal_id}">

之后在account.bank.statement.line模型的方法中就能获取:

parent_journal_id = self.env.context.get('parent_journal_id', False)

(2)通过按钮传递上下文

如果是通过按钮触发方法,在视图的按钮上设置context:

<button name="my_method" string="执行方法" context="{'journal_id': journal_id}"/>

(3)代码中手动传递上下文

调用方法时使用with_context()创建新的上下文环境:

# 合并现有上下文并添加新值
new_context = dict(self.env.context, journal_id=self.journal_id.id)
result = self.with_context(new_context).my_custom_method()

# 或者直接添加单个值
self = self.with_context(journal_id=7)
# 后续方法中可通过self.env.context.get('journal_id')获取

三、处理Odoo 16的Frozendict

Odoo 16中self.env.context是不可变的frozendict,无法直接修改,但你可以通过以下方式创建新的上下文:

1. 合并现有上下文与新参数

# 将现有上下文转为普通字典,再添加新值
updated_context = dict(self.env.context)
updated_context['journal_id'] = 7
# 创建带新上下文的环境
new_env = self.env.with_context(updated_context)

2. 链式调用简化写法

# 直接添加或覆盖上下文参数
self.with_context(journal_id=7).search([('journal_id', '=', self.env.context.get('journal_id'))])

四、针对你的代码修正示例

如果是想在account.bank.statement模型方法中获取当前记录的journal_id,直接读取字段即可:

# 替换原代码
journal_id = self.journal_id.id if self.journal_id else False

如果需要在子记录(line_ids)中获取父记录的journal_id,修改视图的One2Many上下文后,在子模型中读取:

# 在account.bank.statement.line模型中
parent_journal_id = self.env.context.get('parent_journal_id', False)

内容的提问来源于stack exchange,提问作者Faris Ponighzwa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:17:46