【问题标题】:xmlrpc search in odoo databaseodoo 数据库中的 xmlrpc 搜索
【发布时间】:2018-01-02 12:12:45
【问题描述】:

我正在使用 xmlrpc 在我的 postgres odoo 数据库中搜索数据。

当在表中搜索 res_partner 时,一切都很好。

现在我想在 res_partner_title 中搜索,但它没有返回 ID。

我的数据库内容:

myDatabase=# select * from res_partner_title;

id | create_uid |        create_date         |   name    | shortcut | write_uid |         write_date         
----+------------+----------------------------+-----------+----------+-----------+----------------------------
 1 |          1 | 2017-12-29 09:26:11.139936 | Madam     | Mrs.     |         1 | 2017-12-29 09:26:11.139936
 2 |          1 | 2017-12-29 09:26:11.139936 | Miss      | Miss     |         1 | 2017-12-29 09:26:11.139936
 3 |          1 | 2017-12-29 09:26:11.139936 | Sir       | Sr.      |         1 | 2017-12-29 09:26:11.139936
 4 |          1 | 2017-12-29 09:26:11.139936 | Mister    | Mr.      |         1 | 2017-12-29 09:26:11.139936
 5 |          1 | 2017-12-29 09:26:11.139936 | Doctor    | Dr.      |         1 | 2017-12-29 09:26:11.139936
 6 |          1 | 2017-12-29 09:26:11.139936 | Professor | Prof.    |         1 | 2017-12-29 09:26:11.139936
(6 rows)

我的代码:

 myData = myObject.search('res.partner.title', [('shortcut','=','Mr.')])

class MyClass:
def __init__(self, host, port, username, pwd, dbname, context, dbsuperpwd=None,
             dbuser=None, dbpasswd=None):

    self.sock_common = xmlrpclib.ServerProxy ("http://" + host + ":" + str(port) + "/xmlrpc/common")
    self.uid = self.sock_common.login(dbname, username, pwd)    
    self.sock = xmlrpclib.ServerProxy("http://" + host + ":" + str(port) + "/xmlrpc/object")
    self.dbname = dbname
    self.pwd = pwd
    self.dbsuperpwd = dbsuperpwd
    self.context = context



def search(self, modelname, query, offset=0, limit=0, order=False,
           context=None):
    context = context or self.context


    for i in range(MAX_RETRIES):
        try:
            return self.sock.execute(self.dbname, self.uid, self.pwd,
                                     modelname, 'search', query, offset,
                                     limit, order, context)
        except socket.error:
            pass

无论过滤器是什么,它总是返回 1。

我怎样才能得到 3(在我的例子中)?

编辑(添加评论询问数据)

上下文 = {'lang': 'es_ES'}

它返回 1 或 0

我刚刚发现,它在odoo9中有效,在odoo10中失败

【问题讨论】:

  • 修改您的域,作为query 参数发送:[('shortcut','ilike','%Mr.%')]。你也得到ID 1吗?你能把你要发送给search的变量上下文的内容粘贴在这里吗?
  • 已根据您的建议编辑
  • 我已经给你发了一个答案,但是你说你的代码在 v9 上运行但在 v10 上运行很奇怪,看看并告诉我你得到了什么。

标签: python postgresql odoo xml-rpc


【解决方案1】:

我想问题可能出在语言上。您正在发送context es_ES 并寻找英文的快捷方式,因此现在尝试将您当前的搜索域替换为[('shortcut','ilike','%Sr.%')]

看看ir_translation表:

  id  | lang  |  src   |            name            | type  | module |   state    | comments | value | res_id 
------+-------+--------+----------------------------+-------+--------+------------+----------+-------+--------
 6483 | es_ES | Mister | res.partner.title,name     | model | base   | translated |          | Señor |      3
 6559 | es_ES | Mr.    | res.partner.title,shortcut | model | base   | translated |          | Sr.   |      3

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-04
  • 2023-03-14
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多