在 Odoo 中,上下文(context)是一个非常重要的概念。Context 是一个 Python 字典,它在各种方法之间传递,并且可以影响这些方法的行为。
Context 的主要作用和功能:
-
传递参数:在执行方法的过程中,可以通过 context 传递参数。这些参数可以影响方法的行为。
-
本地化:context 中有一些特殊的关键字,可以用来设置当前用户的语言、时区等信息,从而实现本地化。
-
缺省值:context 中的 'default_' 关键字可以用来设置创建新记录时的缺省值。
-
环境信息:context 中还可以保存一些环境信息,比如当前用户的公司、当前的日期等。
举例说明:
1、传递参数:
# 使用 context 传递 'no_reset_password' 参数 self.env['res.users'].with_context(no_reset_password=True).create(vals)
在这个例子中,我们在创建新用户的时候,通过 context 传递 'no_reset_password' 参数,告诉 create
方法不需要重置密码。
假设你正在写一个定时任务,该任务需要在特定时间执行一些特殊操作。你可以使用 context 传递一个标记给方法,告诉它这是一个定时任务,不需要执行一些通常的检查。
# 使用 context 传递 'is_scheduled_task' 参数 self.env['my.model'].with_context(is_scheduled_task=True).my_method()
在 my_method
中,你可以检查 'is_scheduled_task' 参数,并根据它的值改变你的逻辑。
2、设置缺省值:
# 使用 context 设置 'default_name' 缺省值 self.env['res.partner'].with_context(default_name='John').create(vals)
在这个例子中,我们在创建新合作伙伴的时候,通过 context 设置 'default_name' 缺省值为 'John'。
假设你正在为一个商店创建新的产品,你可能希望所有的新产品默认都是可销售的。你可以使用 context 设置 'default_sale_ok' 参数。
# 使用 context 设置 'default_sale_ok' 缺省值 self.env['product.product'].with_context(default_sale_ok=True).create(vals)
在这个例子中,所有新创建的产品都将默认为可销售。
3、本地化:
假设你正在为一个多语言的应用编写代码,你可能需要在每个请求中设置用户的语言。这样,你就可以确保每个用户都看到的是他们自己的语言。
# 使用 context 设置 'lang' 参数 self.env['res.partner'].with_context(lang='fr_FR').name_get()
在这个例子中,name_get
方法将会以法语返回合作伙伴的名字。
4、环境信息:
假设你正在为一个有多个公司的 ERP 系统编写代码,你可能需要在每个请求中设置用户的公司。这样,你就可以确保每个用户只能看到他们自己公司的信息。
# 使用 context 设置 'allowed_company_ids' 参数 self.env['res.partner'].with_context(allowed_company_ids=[1, 2]).name_get()
在这个例子中,name_get
方法只会返回公司 1 和 2 的合作伙伴的名字。
所能用到的场景:
-
当你需要传递一些额外的参数给方法,但是你不想修改这个方法的签名的时候,可以使用 context。
-
当你需要设置一些全局的环境信息,比如当前用户的语言、时区等的时候,可以使用 context。
-
当你需要设置新记录的缺省值的时候,可以使用 context。
总结:
在 Odoo 中,context 是一个非常强大的工具。它不仅可以用来传递参数,设置缺省值,还可以用来保存环境信息。然而,context 也是一个双刃剑,如果使用不当,可能会引入一些难以预见的问题。因此,在使用 context 的时候,需要非常小心,并且始终记住,只有当你无法通过其他方式实现你的需求的时候,才应该使用 context。
标签:总结,设置,default,odoo14,缺省值,参数,context,name From: https://www.cnblogs.com/lyt263/p/17565981.html