我有这个功能,我想扩展。该函数返回一个字典。
def _prepare_order_line_procurement(self, cr, uid, order, line):
return {
'name': line.name,
'origin': order.name,
'date_planned': date_planned,
}
如何将键值对'incoterm': order.incoterm
添加到返回词典中。该功能将成为此
def _prepare_order_line_procurement(self, cr, uid, order, line):
return {
'name': line.name,
'origin': order.name,
'date_planned': date_planned,
'incoterm': order.incoterm,
}
对于词典,你有函数update()
,但我不知道如何应用它来扩展函数。 incoterm
在这里是一个示例,对于其他功能,它可以是需要添加的其他键值对。非常感谢任何帮助!
答案 0 :(得分:1)
目前还不清楚你要完成什么 - 但也许是这样的,它使用了所谓的function or method decorator,在这种情况下会修改函数返回的字典。
def add_incoterm(f):
def decorated(self, cr, uid, order, line):
result = f(self, cr, uid, order, line) # call original function
result.update(incoterm=order.incoterm) # add key value pair to result
return result # return updated result
return decorated
@add_incoterm
def _prepare_order_line_procurement(self, cr, uid, order, line):
return {
'name': line.name,
'origin': order.name,
'date_planned': date_planned,
}
但是,如果您拥有该方法的源代码,那么修改其中的代码(包括附加数据)将更有意义(并且更有效)。
答案 1 :(得分:0)
我们假设你在这里要求简单的解决方案。装饰器的制作是为了不触及你的功能并扩展它的行为,但它可能很复杂。
def _prepare_order_line_procurement(self, cr, uid, order, line, **kwargs):
reply = {
'name': line.name,
'origin': order.name,
# Where did you get this thing? Maybe it should be provided in kwargs?
'date_planned': date_planned,
}
reply.update(**kwargs)
return reply
在这种情况下看看你应该如何使用它,对数据进行采样以使函数可以运行。
# Some tests
_prepare_order_line_procurement(None, cr, uid, order, line) == \
{'origin': 3, 'name': 4, 'date_planned': None}
_prepare_order_line_procurement(None, cr, uid, order, line, something='anything') == \
{'origin': 3, 'something': 'anything', 'name': 4, 'date_planned': None}
_prepare_order_line_procurement(None, cr, uid, order, line, **{'something': 'anything', 'blah': 'blah'}) == \
{'origin': 3, 'blah': 'blah', 'something': 'anything', 'name': 4, 'date_planned': None}