我已经做了一些测试:
>>> empty_recordset = self.env['res.users'] # empty recordset
>>> not_empty_recordset = self.env['res.users'].search([('id', '=', 1)]) # recordset with one record
>>> empty_recordset is False
False
>>> empty_recordset is None
False
>>> empty_recordset == False
False
>>> empty_recordset == True
False
>>> bool(empty_recordset)
False
>>> not empty_recordset
True
>>> if empty_recordset: # it is treated as False
... print('hello')
...
>>> bool(not_empty_recordset)
True
>>> if not_empty_recordset:
... print('hello')
...
hello
>>> not not_empty_recordset
False
bool()
转换记录集时,它将返回True
或False
。 if
和not
语句,结果也是预期的。 is
,==
,!=
一起使用时,结果不是预期的。 怎么了?仅使用
if
和not
语句将记录集视为 bool 值吗?其余的运算符(operator)是否不重载? 最佳答案
这是 __nonzero__
的实现方式:
您可以在odoo/odoo/models.py上检查它:
对于Odoo 10,代码为:
def __nonzero__(self):
""" Test whether ``self`` is nonempty. """
return bool(getattr(self, '_ids', True))
关于python-2.7 - 为什么有些运算符(operator)无法使用Odoo中的记录集按预期方式工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47778312/