为什么“浏览”方法使用不存在的 id 返回错误的记录集?

当我使用该search方法并创建一个查找不存在的 id 的记录集时,结果是预期的空记录集:


>>> self.env['account.invoice'].search([('id', 'in', [23232323123123123, ])])

account.invoice()

但是如果我对browse方法做同样的事情,结果是一个具有该 id 的记录集,但实际上该记录不存在:


>>> o = self.env['account.invoice'].browse([23232323123123123])

>>> o

account.invoice(23232323123123123,)

>>> o.id

23232323123123123

>>> o.number

Traceback (most recent call last):

File "/path/to/odoo/odoo/fields.py", line 937, in __get__

    value = record.env.cache.get(record, self)

File "/path/to/odoo/odoo/api.py", line 960, in get

    value = self._data[field][record.id][key]

KeyError: (<odoo.sql_db.Cursor object at 0x7f4d2985e9e8>, 1)


During handling of the above exception, another exception occurred:


Traceback (most recent call last):

File "/usr/lib/python3.5/code.py", line 91, in runcode

    exec(code, self.locals)

File "<console>", line 1, in <module>

File "/path/to/odoo/odoo/fields.py", line 937, in __get__

    value = record.env.cache.get(record, self)

File "/path/to/odoo/odoo/api.py", line 961, in get

    return value.get() if isinstance(value, SpecialValue) else value

File "/path/to/odoo/odoo/api.py", line 993, in getter

    raise exception

File "/usr/lib/python3.5/code.py", line 91, in runcode

    exec(code, self.locals)

File "<console>", line 1, in <module>

File "/path/to/odoo/odoo/fields.py", line 937, in __get__

    value = record.env.cache.get(record, self)

File "/path/to/odoo/odoo/api.py", line 961, in get

    return value.get() if isinstance(value, SpecialValue) else value

File "/path/to/odoo/odoo/api.py", line 993, in getter

    raise exception

File "/usr/lib/python3.5/code.py", line 91, in runcode

    exec(code, self.locals)

这是文档中的解释:


获取数据库 ID 或 ID 列表并返回记录集,当从 Odoo 外部获取记录 ID(例如通过外部系统往返)或调用旧 API 中的方法时很有用


这是正常行为吗?我觉得这种方法没用

我是否必须browse事先检查数据库中是否存在a中使用的所有记录?


繁华开满天机
浏览 233回答 1
1回答

慕婉清6462132

是的,这是正常行为。检查眉毛方法。此行已注释assert&nbsp;all(isinstance(id,&nbsp;IdType)&nbsp;for&nbsp;id&nbsp;in&nbsp;ids),&nbsp;"Browsing&nbsp;invalid&nbsp;ids:&nbsp;%s"&nbsp;%&nbsp;ids但是你有方法存在exists() 返回一个新的记录集,只包含数据库中存在的记录。可用于检查记录(例如从外部获得)是否仍然存在:
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python