我有一个函数字段,它不会产生任何错误,但即使它应该也没有设置任何值。
代码:
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字段的值(并按下计算按钮,或理想情况下没有该值)时,该值应传递给函数进行计算。
由于
答案 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
希望这对你有帮助