如何使用域列表过滤OpenERP中的数据

Yug*_*Faa 12 expression filter openerp

我想使用域过滤器表达式过滤OPENERP中的recods

在recored我有一个用户列表的字段,所以我想得到用户登录列表的记录

[(user.id , 'in' , 'user_ids')]
Run Code Online (Sandbox Code Playgroud)

这不起作用

它返回此错误:

File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 2356, in search
    return self._search(cr, user, args, offset=offset, limit=limit, order=order, context=context, count=count)
  File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 4846, in _search
    self._apply_ir_rules(cr, user, query, 'read', context=context)
  File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 4728, in _apply_ir_rules
    rule_where_clause, rule_where_clause_params, rule_tables = rule_obj.domain_get(cr, uid, self._name, mode, context=context)
  File "/usr/lib/pymodules/python2.7/openerp/addons/base/ir/ir_rule.py", line 156, in domain_get
    query = self.pool.get(model_name)._where_calc(cr, SUPERUSER_ID, dom, active_test=False)
  File "/usr/lib/pymodules/python2.7/openerp/osv/orm.py", line 4676, in _where_calc
    e = expression.expression(cr, user, domain, self, context)
  File "/usr/lib/pymodules/python2.7/openerp/osv/expression.py", line 632, in __init__
    self.parse(cr, uid, context=context)
  File "/usr/lib/pymodules/python2.7/openerp/osv/expression.py", line 759, in parse
    field_path = left.split('.', 1)
AttributeError: 'int' object has no attribute 'split'
Run Code Online (Sandbox Code Playgroud)

请帮我.

Sud*_*rya 31

您的域语法错误.

它应该是 [('user_ids', '=' , user.id)]

  1. 搜索域中的每个元组都需要有3个元素,格式为:('field_name', 'operator', value),其中:

  2. field_name必须是对象模型的字段的有效名称,可能遵循使用点表示法的多对一关系,例如'street'或'partner_id.country'是有效值.

  3. 运算符必须是此列表中具有有效比较运算符的字符串: =, !=, >, >=, <, <=, like, ilike, in, not in, child_of, parent_left, parent_right 大多数运算符的语义是显而易见的.该child_of运营商将寻找谁是孩子或给定记录的盛大孩子的记录,根据该模型(即由指定的关系字段以下的语义 self._parent_name,默认情况下parent_id.

  4. value必须是一个有效值,以与field_name的值进行比较,具体取决于其类型.

域标准可以使用3个逻辑运算符组合,而不是在元组之间添加:' & '(逻辑AND,默认),' | '(逻辑或),' !'(逻辑非).这些是前缀运算符和' & '和' |的arity '运营商是2,而'是' !'只是1.第一次将它们组合时要非常小心.

以下是从比利时和德国搜索名为ABC的合作伙伴的示例,其语言不是英语::

[('name','=','ABC'),'!',('language.code','=','en_US'),'|',('country_id.code','=','be'),('country_id.code','=','de')]
Run Code Online (Sandbox Code Playgroud)

"&"被省略,因为它是默认的,当然,我们也可以使用"!="的语言,但什么这个领域真正代表的是::

(name is 'ABC' AND (language is NOT english) AND (country is Belgium OR Germany))
Run Code Online (Sandbox Code Playgroud)