Odoo域过滤器无法正常工作

时间:2017-08-16 13:33:52

标签: openerp odoo-8 erp

我尝试创建一个域过滤器,它应该是这样的:

(Followup date < today) AND (customer = TRUE OR user_id = user.id)

我是这样做的:

[('follow_up_date', '&lt;=', datetime.datetime.now().strftime('%Y-%m-%d 00:00:00')),['|', ('customer', '=', 'False'),('user_id', '=', 'user.id')]]

第一部分(时间过滤器)如果单独存在则效果很好,但是当我像上面的例子中那样将它与第二部分连接时,它给了我这个错误:

 File "/usr/lib/python2.7/dist-packages/openerp/osv/expression.py", line 308, in distribute_not
    elif token in DOMAIN_OPERATORS_NEGATION:
TypeError: unhashable type: 'list'

出了什么问题,如何表达我想要的正确域名过滤器?

提前感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

Odoo使用polish notation。如果您想使用逻辑表达式 (A) AND (B OR C)作为域名,这意味着您必须使用:AND A OR B C。如果您想了解有关波兰表示法的更多信息,请查看链接。

这意味着,如果我正确理解了这个问题,你将需要这个:

['&', ('follow_up_date', '&lt;=', datetime.datetime.now().strftime('%Y-%m-%d 00:00:00')),'|', ('customer', '=', 'False'),('user_id', '=', 'user.id')]

答案 1 :(得分:0)

在第二个表达式中尝试不带括号:

[('follow_up_date', '&lt;=', datetime.datetime.now().strftime('%Y-%m-%d 00:00:00')),'|', ('customer', '=', 'False'),('user_id', '=', 'user.id')']

我希望这对你有所帮助。