我试着用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
方法之前有某种方法需要加载插件吗?
谢谢!
答案 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。
希望这有帮助!