如何从sale.order.line onchange访问sale.order字段?

时间:2017-06-23 12:31:26

标签: openerp odoo-8

我已覆盖product_id_change() sale.order.line的工作正常。 现在我的要求是在我的onchange中获取sale.order字段,以便如何从sale.order sale.order.line

获取product_id_change()的字段值

这是我的代码odoov8

def product_id_change(self, cr, uid, ids, pricelist, product, qty=0,  uom=False, qty_uos=0, uos=False, name='', partner_id=False, lang=False, update_tax=True, date_order=False, packaging=False, fiscal_position=False, flag=False, context=None):
    #how to access self.order_id
    print "order id===", order_id

    res = super(sale_order_line, self).product_id_change( cr, uid, ids, pricelist, product, qty=qty,uom=uom, qty_uos=qty_uos, uos=uos, name=name, partner_id=partner_id,lang=lang, update_tax=update_tax, date_order= date_order, packaging=packaging, fiscal_position=fiscal_position, flag=flag, context=context)
    return res

2 个答案:

答案 0 :(得分:1)

您可以按照以下步骤进行操作。

1.在On change方法中,您可以传递一个参数 parent

In [97]: df3.index
Out[97]: Int64Index([10, 11, 12, 13, 14, 15, 16], dtype='int64', name='index')

在上面的视图中,我们使用位置属性选项来替换 on_change 方法。

on_change 方法中,只需在最后添加一个参数表示 sale.order 对象。< / p> sale.order.line 中提供

product_id 字段,您可以在视图中使用 parent 关键字访问order_id。

2. py文件中的继承 product_id_change 方法。

<record model="ir.ui.view" id="sale_margin_sale_order_line">
    <field name="name">sale.order.line.margin_and_quantities.view.form</field>
    <field name="type">form</field>
    <field name="model">sale.order</field>
    <field name="inherit_id" ref="sale.view_order_form"/>
    <field name="arch" type="xml">
        <xpath expr="//field[@name='order_line']/form[@string='Sales Order Lines']/group/group[1]/field[@name='product_id']"
            position="attributes"> position="attributes">
            <attribute name="on_change">    
                    product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,
                    product_uos,name,parent.partner_id, False, False, parent.date_order, False, parent.fiscal_position, True, context,parent)               
            </attribute>
        </xpath>
    </field>
</record>
  

在上面的方法中, order_id 在方法参数中可用,所以你   可以直接访问它。

     

如果您已安装 sale_stock 模块,则应继承   py文件中的 product_id_change_with_wh 方法&amp;在视图中也更改 product_id_change_with_wh on_change 中的位置属性   必须在openerp.py 文件中提供 sale_stock的依赖。

     

之后,您将获得 order_id 字段    product_id_change_with_wh on_change 方法&amp;在 on_change product_id 方法中传递此参数

前:

def product_id_change(self, cr, uid, ids, pricelist, product, qty=0,
            uom=False, qty_uos=0, uos=False, name='', partner_id=False,
            lang=False, update_tax=True, date_order=False, packaging=False, fiscal_position=False, flag=False, context=None,order_id=False):


    res=super(sale_order,self).product_id_change(cr,uid,ids,pricelist,product,qty,uom,qty_uos,uos,name,partner_id,lang,update_tax,date_order,packaging,fiscal_position,flag,context)


    return res

答案 1 :(得分:0)

此方法是使用旧API编写的,因此您必须浏览已更改的sale.order.line记录。

def product_id_change(
        self, cr, uid, ids, pricelist, product, qty=0,  uom=False,
        qty_uos=0, uos=False, name='', partner_id=False, lang=False,
        update_tax=True, date_order=False, packaging=False,
        fiscal_position=False, flag=False, context=None):
    line = self.browse(cr, uid, ids[0], context)
    # print line.order_id.name

    res = super(sale_order_line, self).product_id_change(
        cr, uid, ids, pricelist, product, qty=qty,uom=uom,
        qty_uos=qty_uos, uos=uos, name=name, partner_id=partner_id
        lang=lang, update_tax=update_tax, date_order= date_order,
        packaging=packaging, fiscal_position=fiscal_position,
        flag=flag, context=context)
    return res