0

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

代码:

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 都不是。有什么问题吗?如果是因为 ids 是空白的,我该如何解决?

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

谢谢

4

1 回答 1

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

希望这对你有帮助

于 2013-03-16T06:12:28.547 回答