Search code examples
python-3.xpython-2.7odoo-9odoo-10odoo-11

What with_context() exectly do ? which method it call when i pass with_context?


can anyone tell me that what exactly with_context do in odoo? if suppose i want to get price from price list i do code like this.

product = self.product_id.with_context(
                lang=self.order_id.partner_id.lang,
                partner=self.order_id.partner_id.id,
                quantity=self.product_uom_qty,
                date=today_date,
                pricelist=self.order_id.pricelist_id.id,
                uom=self.product_uom.id,
                fiscal_position=self.env.context.get('fiscal_position'))
 price_unit = self._get_display_price(product) 

@api.multi
def _get_display_price(self, product):
    # TO DO: move me in master/saas-16 on sale.order
    if self.order_id.pricelist_id.discount_policy == 'with_discount':
        return product.with_context(pricelist=self.order_id.pricelist_id.id).price
    final_price, rule_id = self.order_id.pricelist_id.get_product_price_rule(self.product_id, self.product_uom_qty or 1.0, self.order_id.partner_id)
    context_partner = dict(self.env.context, partner_id=self.order_id.partner_id.id, date=self.order_id.date_order)
    base_price, currency_id = self.with_context(context_partner)._get_real_price_currency(self.product_id, rule_id, self.product_uom_qty, self.product_uom, self.order_id.pricelist_id.id)
    if currency_id != self.order_id.pricelist_id.currency_id.id:
        base_price = self.env['res.currency'].browse(currency_id).with_context(context_partner).compute(base_price, self.order_id.pricelist_id.currency_id)
    # negative discounts (= surcharge) are included in the display price
    return max(base_price, final_price)

so what exactly product = self.product_id.with_context() do to get me price. which method it call to get price ?


Solution

  • Context is used to pass parameter across the method calls from xml to python many of odoo method change their value based on the keys inside the context:

    example:

           # this return available quantity of the product in all location
           quantity = product.qty_available
           # this return avaible quantity for a specific location
           quantity = product.with_context('location' : location_id).qty_available
    

    and with_context is used to add or update keys of the context

    for more explanation about context see this:

    what is context in odoo