3

这是一个非常简单但很难回答的问题,因为我认为只有“少数”人会处理这个问题。

我在 Python 中有这个简单的脚本:

import xmlrpclib

username = 'my_openerp_user'
pwd = 'my_password'
dbname = 'my_openerp_database'

sock = xmlrpclib.ServerProxy('http://localhost:8063/xmlrpc/common')
uid = sock.login(dbname, username, pwd)
sock = xmlrpclib.ServerProxy('http://localhost:8063/xmlrpc/object')

args = [('name', 'ilike', 'my_product')]
ids = sock.execute(dbname, uid, pwd, 'product.product', 'search', args)

print ids

它应该在 OpenERP 数据库中找到名称为“my_product”的所有产品,但它没有。我知道为什么:

我不在说英语的国家,所以我在 OpenERP 中安装了一种语言,xmlrpc 的“搜索”正在寻找名称为“my_product”但只有英文的产品。问题是显然没有保存翻译名称的字段......它似乎也是“名称”!因此,如果我用我的语言指定产品名称,我将找不到产品。

世界上有人遇到过同样的问题吗?

编辑

好的,我有一个线索:如果我不做“搜索”,而是“阅读”:

product_names = sock.execute(dbname, uid, pwd, 'product.product', 'read', ids, ['name'], {'lang': 'es_ES'})

这样我就可以指定语言并且它可以工作!但是我不能对“搜索”做同样的事情,我会出错。谁知道路???

新编辑

context = {'lang': 'es_ES'}

args = [('name', 'ilike', 'my_product')]  # consulta

ids = sock.execute(dbname, uid, pwd, 'product.product', 'search', args, context)
4

3 回答 3

5

我几乎可以肯定如果你通过它应该可以lang工作context

例如:context = {'lang': u'pl_PL'}

如果它不起作用,您应该尝试覆盖 name_search 方法。

于 2014-04-24T12:29:02.043 回答
1

搜索方法是这样的:

search(cr, uid, args, offset=0, limit=None, order=None, context=None, count=False)

如果要发送上下文,还必须在 args 和上下文之间发送参数:

ids = sock.execute(dbname, uid, pwd, 'product.product', 'search', args, 0, 0, False, context)
于 2016-04-06T15:47:19.420 回答
0

在 openerp/osv/expression.py 中,查询已被重新制定,仅当 ir_translation 中不存在翻译时,才首先搜索英文原始名称的翻译。OpenERP 服务器 6.0.4

query1 = '( SELECT res_id'          \
         '    FROM ir_translation'  \
         '   WHERE name = %s'       \
         '     AND lang = %s'       \
         '     AND type = %s'
instr = ' %s'
#Covering in,not in operators with operands (%s,%s) ,etc. 
if operator in ['in','not in']:
    instr = ','.join(['%s'] * len(right))
    query1 += '     AND value ' + operator +  ' ' +" (" + instr + ")" + ')'
else:
    query1 += '     AND value ' + operator + instr + ')'
query1 +=' UNION ('                \ 
         '  SELECT id'              \
         '    FROM "' + working_table._table + '"' + ' as wt '   \
         '   WHERE "'+ left + '" ' + operator + instr +  \
         '   AND NOT EXISTS (   ' \   
         '       SELECT res_id FROM ir_translation ' \
         '       WHERE wt.id = res_id ' \
         '       AND name = %s'       \
         '       AND lang = %s'       \
         '       AND type = %s)' +  ")"


query2 = [working_table._name + ',' + left,
          context.get('lang', False) or 'en_US',
          'model',
          right,
          right,
          working_table._name + ',' + left,
          context.get('lang', False) or 'en_US',
          'model'
           ]
于 2016-04-08T06:21:16.890 回答