如何通过插件从Odoo获取环境自己编写?

时间:2016-08-11 13:27:33

标签: openerp odoo-8

我试着用shell来获取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,
.....

但是我搜索了数据库" ethicall"的ir_model表,它包含更多内容:

 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方法之前有某种方法需要加载插件吗?

谢谢!

2 个答案:

答案 0 :(得分: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()方法!

答案 1 :(得分:0)

如果您想从shell访问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

希望这有帮助!