无法执行功能
问题描述:
这里是我的课程和方法。 我只是写了获取记录,并需要打印它们。但是当在调试模式下运行openerp时,它不起作用&也不适用于该方法。 &还需要澄清取方法的OpenERP 7无法执行功能
class namelistupdate(osv.osv):
def _mytest_query(self, cr, uid, ids, name, args, context=None):
print ('here is demo sql query function result ')
cr.execute("""SELECT module,(id*5000)as result FROM ir_model_data WHERE id=1""")
res = cr.dictfetchall()
print ('here is demo sql query function result ')
print (res)
def _invoiced_rate(self, cr, uid, ids, name, args, context):
self._mytest_query(self, cr, uid, ids, name, args, context)
amount_untaxed = 1
record_id = ids[0]
res = {record_id: 0.0}
if amount_untaxed == 0:
res[record_id] = 100.0
else:
res[record_id] = 50.0
return res
_name = "checkroll.namelist.update"
_description = "This table is for keeping Name list updates"
_columns = {
'date': fields.date("Date"),
'val': fields.function(_invoiced_rate, method=True, type='float', string='Test', store=True),
}
namelistupdate()
误差小于
Client Traceback (most recent call last): File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/web/http.py", line 203, in dispatch response["result"] = method(self, **self.params) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/web/controllers/main.py", line 1074, in call_kw return self._call_kw(req, model, method, args, kwargs) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/web/controllers/main.py", line 1066, in _call_kw return getattr(req.session.model(model), method)(*args, **kwargs) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/web/session.py", line 43, in proxy result = self.proxy.execute_kw(self.session._db, self.session._uid, self.session._password, self.model, method, args, kw) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/web/session.py", line 31, in proxy_method result = self.session.send(self.service_name, method, *args) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/web/session.py", line 104, in send raise xmlrpclib.Fault(openerp.tools.ustr(e), formatted_info) Server Traceback (most recent call last): File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/web/session.py", line 90, in send return openerp.netsvc.dispatch_rpc(service_name, method, args) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/netsvc.py", line 293, in dispatch_rpc result = ExportService.getService(service_name).dispatch(method, params) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/service/web_services.py", line 618, in dispatch res = fn(db, uid, *params) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/osv.py", line 188, in execute_kw return self.execute(db, uid, obj, method, *args, **kw or {}) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/osv.py", line 131, in wrapper return f(self, dbname, *args, **kwargs) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/osv.py", line 197, in execute res = self.execute_cr(cr, uid, obj, method, *args, **kw) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/osv.py", line 185, in execute_cr return getattr(object, method)(cr, uid, *args, **kw) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/orm.py", line 4479, in create self.pool.get(object)._store_set_values(cr, user, ids, fields2, context) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/orm.py", line 4627, in _store_set_values result = self._columns[f].get(cr, self, ids, f, SUPERUSER_ID, context=context) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/fields.py", line 1131, in get result = self._fnct(obj, cr, uid, ids, name, self._arg, context) File "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/checkroll/checkroll.py", line 55, in _invoiced_rate self._mytest_query(self, cr, uid, ids, name, args, context) TypeError: _mytest_query() takes exactly 7 arguments (8 given)
答
删除自我关键字在参数列表中。
答
您在代码中调用函数的功能是完全错误做些什么?
在python中调用一个函数,我们使用圆括号指定函数名称,而你没有指定它。
第二需要将参数作为函数中的参数数传递。
所以,你的代码必须是这样的:
def _invoiced_rate(self, cr, uid, ids, name, args, context):
self._mytest_query(cr, uid, ids, name, args, context)
amount_untaxed = 1
record_id = ids[0]
res = {record_id: 0.0}
if amount_untaxed == 0:
res[record_id] = 100.0
else:
res[record_id] = 50.0
return res
并需要完整的功能return语句后否则返回无是默认。
您可以参考,如何在Python定义功能:http://docs.python.org/2/tutorial/controlflow.html#defining-functions
对于OpenERP的功能,您可以在这里详细解释:http://doc.openerp.com/v6.1/developer/03_modules_2.html在“函数域”标签。 希望这个帮助
现在的错误当属 AttributeError的:“namelistupdate”对象有没有属性“mytest_query” – 2013-03-14 09:02:09
你忘了'_':函数名'_mytest_query' – 2013-03-14 09:03:44
是的,对不起,我忘了在_函数名。感谢Francesco Montesano纠正我:) – user1576199 2013-03-14 09:06:46