Odoo Help

Welcome!

This community 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.

0

why context isn't passed to .py?

By
Andrew
on 10/14/13, 8:08 AM 1,887 views

Hi, I have a function called search in boatcompany.py that uses the context i'm passing in the attribute as below:

<xpath expr="//field[@name='product_id']" position="attributes">
            <attribute name="context">{'boatmodel_id': parent.boatmodel_id}</attribute>
</xpath>

I expect to get context['boatmodel_id'] in my def, but I didn't. I print context and see all the defaults context only. May I know why? Below are my files:

boatcompany.py

from osv import osv, fields

class product_product(osv.osv):
    _inherit = "product.product"
    _columns = {
        'boatlength': fields.char("Boat Length", size=10),
        'fuelcapacity': fields.char("Fuel Capacity", size=10),
        'modeloptions_id': fields.many2one('product.category','Model Options')
    }
    def search(self, cr, uid, args, offset=0, limit=None, order=None, context=None, count=False):
        print context
        if context is None:
            context = {}
        if context.get('boatmodel_id'):
            print "CONTEXT===="
            print context['boatmodel_id']
            productobj = self.pool.get('product.product').read(cr, uid, context['boatmodel_id'], ['modeloptions_id'])
            args = [('categ_id','=',productobj['modeloptions_id'][0])] + args
        return super(product_product, self).search(cr, uid, args, offset, limit, order, context=context, count=count)

class sale_order(osv.osv):
    _inherit = "sale.order"
    _columns = {
        'boatmodel_id': fields.many2one("product.product", "Boat Model", domain=[('categ_id.name','=','Boat Models')])
    }

and inheriting sale_view.xml in boatcompany_view.xml as below:

   <record id="sale_view_order_form" model="ir.ui.view">
      <field name="model">sale.order</field>
      <field name="inherit_id" ref="sale.view_order_form" />
      <field name="arch" type="xml">
        <field name="partner_id" position="after">
          <field name="boatmodel_id" />
        </field>
        <xpath expr="//field[@name='product_id']" position="attributes">
          <attribute name="context">{'boatmodel_id': parent.boatmodel_id}</attribute>
        </xpath>
      </field>
    </record>

I'm not sure why you're trying to use the context here, or what end goal you're trying to accomplish. I think what you ought to be doing is setting the domain on the product_id field in the sales order form, if you're trying to filter that down based on another custom field you're adding in.

Brett Lehrer
on 10/21/13, 4:36 PM

I've got the same Problem over here. It seems like it is a bug. Somehow the context does't change, even though it should.

Jan Dasenbrock
on 11/22/13, 5:26 AM
0
Kyle Connor
On 5/28/15, 7:42 PM

Trick I found to work is to override the whole context with the context already passed (found using developer mode) a more explicit xpath. Also, there is another view that is overriding that field (sale.order.form.sale.stock). The below passes the appropriate context on the sales order line without opening the other form:

<record id="sale_view_order_form_inherit" model="ir.ui.view">
<field name="name">sale.view.order.form.inherit</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<field name="partner_id" position="after">
<field name="boatmodel_id"/>
</field>
<xpath expr="//field[@name='order_line']/tree//field[@name='product_id']" position="attributes">
<attribute name="context">{'boatmodel_id': parent.boatmodel_id,'partner_id':parent.partner_id, 'quantity':product_uom_qty, 'pricelist':parent.pricelist_id, 'uom':product_uom"</attribute>
</xpath>
</field>
</record>



0
Vichai Vongvorakul
On 11/19/13, 11:23 PM

Change something in boatcompany_view.xml: ... <field name="inherit_id" ref="sale_stock.view_order_form_inherit"/> ...

Hope this will help.

Thanks! It helped. I had the same problem.

ERPWare Ltd., Jarmo Nurmela
on 11/22/13, 12:49 PM
0
jgonzalez
On 4/7/14, 3:05 PM

I had the same problem with that example. Doing those changes helped get the "boatmodel_id" in the context, but I get a bool in "modeloptions_id".

This is error that I get from OpenErp sever.

args = [('categ_id', '=', productobj['modeloptions_id'][0])] + args TypeError: 'bool' object has no attribute '__getitem__'

I really appreciate some help.

Thanks,

jgonzalez

0
Jan Dasenbrock
On 1/7/14, 10:13 AM

The solution from Vichai Vongvorakul didn't work for me, but I finally figured out a solution for me. First of all you need to change the Technical Settings in the Users Access Right. You have to activate "Properties on lines", so a new window pops up when you create a new order line in the sales order. Otherwise the context won't be passed correctly. You also need to change your boatcompany_view.xml like Vichai Vongvorakul to <field name="inherit_id" ref="sale_stock.view_order_form_inherit"/> not <field name="inherit_id" ref="sale.view_order_form"/>. Otherwise you won't affect the context of the field "product_id" in the window that pops up.

Hope this will help.

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!

About This Community

This community is for professionals and enthusiasts of our products and services. Read Guidelines

Question tools

0 follower(s)

Stats

Asked: 10/14/13, 8:08 AM
Seen: 1887 times
Last updated: 5/28/15, 7:42 PM