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。谢谢你的回答。