0

我做了这个函数,在 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()

然后在 a 中调用它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)

这是我第一次cr.execute从 openerp 中的模块进行查询,所以我不知道我是否遗漏了什么,这种错误在 python 中很常见,但无法获得任何线索。

任何人都可以对此有所了解吗?

提前致谢!

PSproduct_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文件。

4

1 回答 1

1

您没有在功能字段方法中使用正确的签名,您的代码在函数定义中缺少 2 个参数,它应该看起来像:

def cert_rev(self, uid, arg, ids, field_name, field_args, context=None):

有关它的参数和其他功能字段选项的更多信息,您可以在此处阅读。

于 2013-07-20T18:40:58.320 回答