Odoo Help


What's the context?

on 2/19/13, 5:31 AM 30,799 views

Several questions about context in OpenERP:

  1. What is it ?
  2. How to define it and what is active_id regarding context ?
  3. What does context.get('Active_id',False/True) stand for ?
This question has been included in the official documentation.
Andreas Brueckl
On 2/19/13, 7:06 AM

The context is a python dictionary and is used to pass certain data to a method. Since nearly all methods have a context parameter you can use the context to pass data through several levels of python methods. For example you can set a context value in a XML-view and process it in the write() method of the osv object.


returns the value of the key 'active_id'. If the key is not in the context, then it returns the value 'False'.

The value in 'active_id' is passed from the web client and contains the ID of the current selected record.

Here is an example how the context is used in the Sale module. File sale_view.xml:

        <record id="view_order_form" model="ir.ui.view">
            <field name="name">sale.order.form</field>
            <field name="model">sale.order</field>
            <field name="arch" type="xml">
                <form string="Sales Order" version="7.0">
                        <button name="invoice_recreate" states="invoice_except" string="Recreate Invoice" groups="base.group_user"/>
                        <button name="invoice_corrected" states="invoice_except" string="Ignore Exception" groups="base.group_user"/>
                        <button name="action_quotation_send" string="Send by Email" type="object" states="draft" class="oe_highlight" groups="base.group_user"/>

You can see that the button third button (Send by Email) calls method action_quotation_send in sale.py.

Here is the relevant code in sale.py:

def action_quotation_send(self, cr, uid, ids, context=None):
        'default_model': 'sale.order',
        'default_res_id': ids[0],
        'default_use_template': bool(template_id),
        'default_template_id': template_id,
        'default_composition_mode': 'comment',
        'mark_so_as_sent': True
    return {
        'type': 'ir.actions.act_window',
        'view_type': 'form',
        'view_mode': 'form',
        'res_model': 'mail.compose.message',
        'views': [(compose_form_id, 'form')],
        'view_id': compose_form_id,
        'target': 'new',
        'context': ctx,

The context is updated with the flag mark_so_as_sent set to True. Afterwards the send-mail window (mail.compose.message) is opened and the modified context is passed.

Then the send_mail() method is overwritten. If the flag mark_so_as_sent has been set in the context, then the new functionality is called. This ensures that the current behavior of send_mail() is not affected. But when the wizard is opened from the Sale Order, the new functionality will be executed.

Also in sale.py:

class mail_compose_message(osv.Model):
    _inherit = 'mail.compose.message'

    def send_mail(self, cr, uid, ids, context=None):
        context = context or {}
        if context.get('default_model') == 'sale.order' and context.get('default_res_id') and context.get('mark_so_as_sent'):
            context = dict(context, mail_post_autofollow=True)
            wf_service = netsvc.LocalService("workflow")
            wf_service.trg_validate(uid, 'sale.order', context['default_res_id'], 'quotation_sent', cr)
        return super(mail_compose_message, self).send_mail(cr, uid, ids, context=context)

Can you give some additional details and samples ?

Altınkaya Elektronik Cihaz Kutuları imalat Ticaret ltd sti, Ahmet Altinisik
on 2/19/13, 4:32 PM

I have updated my answer with an example how the context is used in the Sales module

Andreas Brueckl
on 2/20/13, 3:58 AM

why is the context parameter send as "context=context" and not just ''context''?

on 9/20/13, 12:13 PM

In this example this would make no difference. But sometimes there are more parameters between "ids" and "context" and then this is required.

Andreas Brueckl
on 9/20/13, 12:17 PM
This question has been included in the official documentation.
On 2/26/13, 3:46 AM

The context is used to pass certain data to a method in the python code.


def get_product_available(self, cr, uid, ids, context=None):
        if context.get('shop', False):
        if context.get('warehouse', False):
        if context.get('location', False):

        return res


def _default_location_source(self, cr, uid, context=None):
        if context.get('move_line', []):
        elif context.get('address_in_id', False):
        return location_id

In my doubt is How to find set a context value in a XML-view for a particular python code?

In the below python xml code:-


context="{'location':location_id, 'uom':product_uom, 'to_date':parent.date}"


<field name="location_id" widget="selection" context="{'location': self}"/>
<field name="warehouse_id" widget="selection" context="{'warehouse': self}"/>

In the stock_view and product_view xml file context set "location" and "warehouse" only found.

How to find the xml file where context set value for the "shop", "move_line", "address_in_id"?

In the above example Context can set only same module xml file or can set any other module xml file?

About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.


Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now

Question tools

4 follower(s)


Asked: 2/19/13, 5:31 AM
Seen: 30799 times
Last updated: 4/21/17, 12:31 AM