我尝试创建一个域过滤器,它应该是这样的:
(Followup date < today) AND (customer = TRUE OR user_id = user.id)
我是这样做的:
[('follow_up_date', '<=', 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'
出了什么问题,如何表达我想要的正确域名过滤器?
提前感谢您的帮助:)
答案 0 :(得分:1)
Odoo使用polish notation。如果您想使用逻辑表达式
(A) AND (B OR C)
作为域名,这意味着您必须使用:AND A OR B C
。如果您想了解有关波兰表示法的更多信息,请查看链接。
这意味着,如果我正确理解了这个问题,你将需要这个:
['&', ('follow_up_date', '<=', datetime.datetime.now().strftime('%Y-%m-%d 00:00:00')),'|', ('customer', '=', 'False'),('user_id', '=', 'user.id')]
答案 1 :(得分:0)
在第二个表达式中尝试不带括号:
[('follow_up_date', '<=', datetime.datetime.now().strftime('%Y-%m-%d 00:00:00')),'|', ('customer', '=', 'False'),('user_id', '=', 'user.id')']
我希望这对你有所帮助。