我创建了这个函数,在PostgreSQL中执行查询,并从一个字段中减去一个数量,当在OpenErp中完成一个采购订单时,在两个字段之间进行减法,每个字段属于一个不同的类在OpenErp
中 def cert_rev(self, uid, arg, ids, context=None):
res = {}
for record in self.browse(cr, uid, ids, context):
cr.execute('''SELECT product_qty FROM purchase_order_line
WHERE cert_v IS TRUE
AND state IS approved
sum(certificados_line.Cantidad - purchase_order_line.product_qty)''')
res = cr.fetchone()
然后在column
中调用它,如下所示:
'se_consumio' : fields.function(cert_rev, type='float', string='Prueba Material consumido'),
但它现在无法正常工作,它给了我这个错误:
Client Traceback (most recent call last):
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\openerp\addons\web\http.py", line 204, in dispatch
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\openerp\addons\web\controllers\main.py", line 1130, in call_kw
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\openerp\addons\web\controllers\main.py", line 1122, in _call_kw
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\openerp\addons\web\session.py", line 42, in proxy
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\openerp\addons\web\session.py", line 30, in proxy_method
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\openerp\addons\web\session.py", line 103, in send
Server Traceback (most recent call last):
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\openerp\addons\web\session.py", line 89, in send
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\.\openerp\netsvc.py", line 292, in dispatch_rpc
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\.\openerp\service\web_services.py", line 626, in dispatch
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\.\openerp\osv\osv.py", line 188, in execute_kw
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\.\openerp\osv\osv.py", line 131, in wrapper
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\.\openerp\osv\osv.py", line 197, in execute
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\.\openerp\osv\osv.py", line 185, in execute_cr
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\.\openerp\osv\orm.py", line 3604, in read
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\.\openerp\osv\orm.py", line 3724, in _read_flat
File "C:\Program Files\OpenERP 7.0-20130520-231036\Server\server\.\openerp\osv\fields.py", line 1131, in get
TypeError: cert_rev() takes at most 5 arguments (7 given)
这是我第一次从openerp中的模块进行查询cr.execute
,所以我不知道我是否遗漏了某些东西,这种错误在python中很常见,但无法获取关于这个的任何线索。
任何人都能对此有所了解吗?
提前致谢!
P.S。 product_qty
是名为purchase_order_line
的类的一部分:
'product_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product Unit of Measure'), required=True),
Cantidad
是名为certificados_line
的类的一部分:
'Cantidad' : fields.float('Cantidad'),
具有此certificados_line
类的模块,purchase
作为__openerp__.py
文件的依赖项。
答案 0 :(得分:1)
你没有在功能字段方法中使用正确的签名,你的代码在函数定义中缺少2个参数,它应该看起来像:
def cert_rev(self, uid, arg, ids, field_name, field_args, context=None):
有关它的参数和其他功能字段选项的更多信息,请阅读here。