Ich habe einige Tests gemacht:Warum funktionieren einige Operatoren nicht wie erwartet mit Recordsets in Odoo?
>>> 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
- Wenn der Re-Cord mit
bool()
gegossen wird, kehrtTrue
oderFalse
. - Mit
if
undnot
Aussagen ist das Ergebnis auch das erwartete. - Aber wenn es mit den Operatoren
is
,==
,!=
verwendet wird, ist das Ergebnis nicht das erwartete.
Was passiert? Wird das Recordset nur mit den Anweisungen if
und not
als boolescher Wert behandelt? Sind die übrigen Bediener nicht überlastet?