Odoo 8:字段中的fnct\U inv有问题。未触发函数()

Odoo 8:字段中的fnct\U inv有问题。未触发函数(),odoo,odoo-8,Odoo,Odoo 8,我创建了一个具有以下声明的函数字段: 'purchase_id': fields.function(_get_purchase_id, fnct_inv=_set_purchase_id, method=True, type="many2one", relation="purchase.order", string="Bon de commande"), 问题是fnct\u inv未触发,且字段purchase\u id保持为空。 以下是方法\u set\u purchase\u id:的定义


我创建了一个具有以下声明的函数字段:

'purchase_id': fields.function(_get_purchase_id, fnct_inv=_set_purchase_id, method=True, type="many2one", relation="purchase.order", string="Bon de commande"),
问题是fnct\u inv未触发,且字段purchase\u id保持为空。
以下是方法\u set\u purchase\u id:
的定义

def _set_purchase_id(self, cr, uid, ids, field_name, field_value, arg, context):
    query = """
    SELECT picking_id, po.id FROM stock_picking p, stock_move m, purchase_order_line pol, purchase_order po
        WHERE p.id in %s and p.id = m.picking_id and m.purchase_line_id = pol.id and pol.order_id = po.id
        GROUP BY picking_id, po.id

    """
    cr.execute(query, (tuple(ids), ))
    picks = cr.fetchall()
    _logger.info("============================================ %s " % ids)
    for pick_id, po_id in picks:
        self.write(cr, uid, [pick_id], {'purchase_id': [(4, po_id)]}, context=context)

有人能帮我吗?还是有其他解决办法?谢谢

odoo8中,我们使用
计算字段

purchase_id = fields.Many2one('purchase.order','Bon de commande',compute='_set_purchase_id')

def _set_purchase_id(self, cr, uid, ids, field_name, field_value, arg, context):
    query = """
    SELECT picking_id, po.id FROM stock_picking p, stock_move m, purchase_order_line pol, purchase_order po
        WHERE p.id in %s and p.id = m.picking_id and m.purchase_line_id = pol.id and pol.order_id = po.id
        GROUP BY picking_id, po.id

    """
    cr.execute(query, (tuple(ids), ))
    picks = cr.fetchall()
    _logger.info("============================================ %s " % ids)
    for pick_id, po_id in picks:
        self.write(cr, uid, [pick_id], {'purchase_id': [(4, po_id)]}, context=context)
有关更多信息,您可以参考:

Odoo中的“反向”方法的目的不是设置其定义的字段,而是设置该字段计算所需的所有字段,以便计算将计算用户为该计算字段赋予Odoo的值

让我给你举个例子,因为我不想为你的问题找到现成的解决方案

如果模型上有一个由同一模型上的日期字段(
date\u last\u action
)计算的计算字段
days\u since\u last\u action
),则反向方法不会设置
days\u since\u since\u action
。相反,您必须采用新的
days\u(自上次操作以来)
值,并将其反转到新日期

那意味着

计算方法为自上次行动后的
days\u=今天-日期\u上次行动


逆方法是
date\u last\u action=today-自上次\u action以来的新天数值

认为新api不适用于odoo 8。谢谢你的回答。