0

これが私のクラスとメソッドです。私はレコードを取得するために書いたばかりで、それらを印刷する必要があります.しかし、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()

エラーは以下です

クライアント トレースバック (最新の呼び出しが最後): ファイル "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/web/http.py"、行 203、ディスパッチ中
    response["result"] = method(self, **self.params) ファイル "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/web/controllers/main.py"、1074 行目、 call_kw で
    return self._call_kw(req, model, method, args, kwargs) ファイル "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/web/controllers/main.py"、1066 行目、_call_kw 内
    return getattr(req.session.model(model), method)(*args, **kwargs) ファイル "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/web/session.py",プロキシ内の 43 行目
    結果 = self.proxy.execute_kw(self.session._db、self.session._uid、self.session._password、self.model、メソッド、args、kw) ファイル "/home/priyan/Software/openerp-7.0-20130309 -002120/openerp/addons/web/session.py"、31 行目、proxy_method 内
    result = self.session.send(self.service_name, method, *args) ファイル「/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/web/session.py」、104行目、送信中
    xmlrpclib.Fault(openerp.tools.ustr(e),formatted_info)を上げる


サーバー トレースバック (最新の呼び出しが最後): ファイル "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/web/session.py"、行 90、送信中
    return openerp.netsvc.dispatch_rpc(service_name, method, args) ファイル「/home/priyan/Software/openerp-7.0-20130309-002120/openerp/netsvc.py」、293 行目、dispatch_rpc 内
    result = ExportService.getService(service_name).dispatch(method, params) ファイル「/home/priyan/Software/openerp-7.0-20130309-002120/openerp/service/web_services.py」、618 行目、ディスパッチ中
    res = fn(db, uid, *params) ファイル "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/osv.py"、188 行目、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" 行131、ラッパー内
    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) ファイル "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/osv.py"、185 行目、 execute_cr で
    return getattr(object, method)(cr, uid, *args, **kw) ファイル「/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/orm.py」、4479 行目、作成中
    self.pool.get(object)._store_set_values(cr, user, ids, fields2, context) ファイル「/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/orm.py」、4627 行目、 _store_set_values で
    結果 = self._columns[f].get(cr, self, ids, f, SUPERUSER_ID, context=context) ファイル "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/osv/fields.py" 、行 1131、get で
    結果 = self._fnct(obj, cr, uid, ids, name, self._arg, context) ファイル "/home/priyan/Software/openerp-7.0-20130309-002120/openerp/addons/checkroll/checkroll.py", 55行目、_invoiced_rate
    self._mytest_query(self, cr, uid, ids, name, args, context) TypeError: _mytest_query() は正確に 7 つの引数を取ります (8 つ指定)

4

2 に答える 2

2

パラメータリストのselfキーワードを削除します。

于 2013-03-14T10:36:42.790 に答える
1

関数から関数を呼び出すためにコードで行ったことは、完全に間違っていますか?

関数を呼び出すPythonでは、指定しなかった丸括弧で関数名を指定します。

2 つ目は、関数内の引数の数として引数を渡す必要があります。

したがって、コードは次のようにする必要があります。

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 ステートメントが必要な場合は、それ以外の場合は None をデフォルトに戻します。

Python で関数を定義する方法を参照できます: http://docs.python.org/2/tutorial/controlflow.html#defining-functions

openerp 関数については、ここで詳細な説明を得ることができます: http://doc.openerp.com/v6.1/developer/03_modules_2.html「関数フィールド」タグの下。この助けを願っています

于 2013-03-14T08:51:57.883 に答える