2016-08-11 5 views
1

私は貝にOdooの環境を取得しよう:アドオンを使って環境を取得するにはどうすればいいですか?

from openerp.modules.registry import RegistryManager 
from openerp.api import Environment 

r = RegistryManager.get('ethicall') 
cr = r.cursor() 
Environment.reset() 
env = Environment(cr, uid, context={}) 

そして私はenv.registry.modelsからモデルを取得しようとします。私はOdooのモデルを入手するだけです。

>>> env.registry.models 
>>> {'_unknown': _unknown, 
'account.account': account.account, 
'account.account.template': account.account.template, 
'account.account.type': account.account.type, 
..... 

が、私は、データベースのir_model表「ethicall」を検索し、それはより多くのように含まれています

137 | er.base.account.journal        | 帐户流水                 | base |  |   |    |   | 
138 | er.base.account          | 基础帐户                 | base |  |   |    |   | 
139 | er.base.budget          | 预算计划                 | base |  |   |    |   | 
140 | er.base.expense          | 医时费用计划                | base |  |   |    |   |   |    |   | 
..... 

しかし、いくつかの方法をそこに持っている場合、彼らはenv.registry.models

ではないロードする必要があります私がenv.registry.modelsメソッドを呼び出す前にaddons?

ありがとうございます!

答えて

0

シェルからodooの環境にアクセスする場合は、xmlrpcを使用できます。 xmlrpcの助けを借りて、あなたのメソッドに応じてexecute_kwを変更するだけで、モデルのほぼすべてのメソッドを呼び出すことができます。

ここにはあなたを助けるデモスクリプトがあります。

import xmlrpclib 
print "executing..." 


url = 'http://192.168.12.130:8069' 
db = 'odoo_addons_9c' 
username = 'admin' 
password = 'a' 

common = xmlrpclib.ServerProxy('{}/xmlrpc/common'.format(url)) 
models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url)) 
uid = common.authenticate(db, username, password, {}) 

model_ids = models.execute_kw(db, uid, password, 'ir.model', 'search', [[]]) 
model_datas = models.execute_kw(db, uid, password, 'ir.model', 'read', [model_ids], {'fields': ['name']}) 

for data in model_datas: 
    print data 

詳細については、linkを参照してください。

希望すると便利です。

1

ありがとうございます! 私はopenerp.service.serverのコードを読んで、odooのORMの環境を得ることができる方法を見つけるために試してみてください。

import openerp 
args = ['-c','openerp-server.conf','-d','testbase'] 
openerp.tools.config.parse_config(args) 

from openerp.modules.registry import RegistryManager 
from openerp.api import Environment 

r = RegistryManager.get('testbase') 
cr = r.cursor() 
Environment.reset() 
env = Environment(cr, uid, context={}) 

そして最後に、私は env['module_name'].search()メソッドを使用することができます!

関連する問題