-->

Function field is not working in OpenERP

2019-09-17 15:05发布

问题:

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?

回答1:

Sometimes function fields need the parameter: store=True

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



回答2:

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.



回答3:

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