You may want to pass some data to a specific page in Odoo, and change the fields based on those data. In those cases, you want to use Context. Context is a data structure passed to the request object that contains hidden values, and can be used to change results of the page.
Context is a frozendict data type in Odoo. That’s why you can change it like you do in a dict data type, for example:
dict_object.update({
'test': 'test_value',
})
As the Context is frozendict, it won’t take such changes. Odoo provides a way to change values, it’s called ‘with_context’. The syntax is as following:
self = self.with_context({
'test': 'test_value',
})
This one should rewrite the context available in the self object by adding the new key:value pair you have mentioned. There are times, this might not work as expected, and you want a patch technique to update the context. This can be done by changing the data type to dict.
self.env.context = dict(self.env.context)
self.env.context.update({
'test': 'test_value',
})
This would also add the new key:value pair to your context and work as expected. There is almost no security concern here for converting the frozendict as the context will destroy once the page is left soon enough.
Source: https://mellowhost.com/blog/how-to-update-context-in-odoo.html