Function field is not working in OpenERP

2019-09-17 14:30发布

In purchase.order.line I added new field pln price and changed unit price field to function:

'price_unit': fields.function(_amount_pln, string='Unit Price', required=True, digits_compute= dp.get_precision('Product Price')),
'plnprice': fields.float('PLN Price', digits_compute= dp.get_precision('PLN Price')),

Here is function:

def _amount_pln(self, cr, uid, ids, prop, arg, context=None):
    res = {}
    for line in self.browse(cr, uid, ids, context=context):
        res[line.id] = line.plnprice * 0.25
    return res

exchange value now is hardcoded, 0.25 as you see in _amount_pln function

Then I added new field in purchase.order class:

'exchange_value': fields.float('Exchange',readonly=False)

But how get this field value to my _amount_pln function I don't know. can you please help me how to resolve this problem?

3条回答
手持菜刀,她持情操
2楼-- · 2019-09-17 14:47

Try following,

def _amount_pln(self, cr, uid, ids, prop, arg, context=None):
    res = {}
    for line in self.browse(cr, uid, ids, context=context):
        res[line.id] = line.plnprice * line.order_id.exchange_value
    return res

order_id is many2one field in purchase order line in relation with purchase order, so you can easily access values of purchase order in purchase order line.

查看更多
Bombasti
3楼-- · 2019-09-17 15:02

Sometimes function fields need the parameter: store=True

Try adding this parameter to your function field and see if it works.

查看更多
Ridiculous、
4楼-- · 2019-09-17 15:13

Relation between "purchase.order" and "purchase.order.line" is "order_id". "purchase.order.line" contains "order_id". You can get values of "purchase.order" using this "order_id".

for purchase_line in self.browse(cr, uid, ids, context=context):
    res[line.id] = purchase_line.plnprice * purchase_line.order_id.exchange_value
查看更多
登录 后发表回答