我已经做了一些测试:

>>> 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()转换记录集时,它将返回TrueFalse
  • 对于ifnot语句,结果也是预期的。
  • 但是,当它与运算符is==!=一起使用时,结果不是预期的。

  • 怎么了?仅使用ifnot语句将记录集视为 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/

    10-13 05:35