openerp fields.function不影响价值

时间:2013-03-15 13:52:47

标签: openerp

我有一个函数字段,它不会产生任何错误,但即使它应该也没有设置任何值。

代码:

class stock_move_custom(osv.osv):
_name = 'stock.move'
_inherit = 'stock.move'

def _penalty(self, cr, uid, ids, field_name, arg, context=None):
    if not ids: return {}
    res = {}
    for id in ids:
        res[id] = 20.0

    for line in self.browse(cr, uid, ids, context=context):
        if line.picking_id:
            if line.picking_id.purchase_id:
                if line.picking_id.purchase_id.penalty_id:
                    res[line.id] = 10.0
    return res     

    _columns = {
            'value_forpenalty': fields.float('Value', digits=(16,2)),
            'actual_penalty': fields.function(_penalty, type='float', digits=(16,2), string='Penalty', store=True, select=True)
            }
stock_move_custom()

注意:penalty_id是添加到purchase.order的自定义子项的many2one。

Q1。我得到的只是罚球0。既不是20也不是10.什么可能是错的?如果是因为id为空白,我该如何解决?

Q2。如何将value_forpenalty传递给函数,因为我最终需要它来计算惩罚?因此,当用户在表单中输入value_forpenalty字段的值(并按下计算按钮,或理想情况下没有该值)时,该值应传递给函数进行计算。

由于

1 个答案:

答案 0 :(得分:0)

我的代码在您接受时正常工作,代码中没有任何问题。

您可以重新启动服务器并再次检查。

for line in self.browse(cr, uid, ids, context=context):
        if line.picking_id and line.picking_id.purchase_id and line.picking_id.purchase_id.penalty_id:
            res[line.id] = 10.0

传递你的参数value_forpenalty,你可以在你的函数中从行

获得这个值

喜欢

    res[line.id] = line.value_forpenalty

希望这对你有帮助