Odoo 记录集为空,无论是否使用修饰符

Odoo 记录集为空,无论是否使用修饰符,odoo,odoo-12,Odoo,Odoo 12,我试图获取日记账项目中货币的ID,但由于某种原因,我得到了一个错误的布尔值 以下是相关代码: class JournalItem(models.Model): _name = "account.move.line" _inherit = "account.move.line" def _get_current_rate(self): ... print(self.currency_id.id) #currency_id

我试图获取日记账项目中货币的ID,但由于某种原因,我得到了一个错误的布尔值

以下是相关代码:

class JournalItem(models.Model):
    _name = "account.move.line"
    _inherit = "account.move.line"

    def _get_current_rate(self):
        ...
        print(self.currency_id.id) 
        #currency_id is a Many2one field of comodel res.currency.

    rate = fields.Float(string="Rate", digits=(12, 6),
            default=_get_current_rate)

哪些产出:

False
我玩弄了@api.multi和@api.one装饰器,但没有发现任何变化。感觉我错过了一些重要的东西

更新1:

选中时,
self
account.move.line()

这应该类似于
account.move.line(1,2,3,4,…)
可能与默认属性有关,会随着我的理解而更新

更新2:

这里的主要问题是缺少货币,即使给定了有效的日记账分录记录编号,这种情况仍然存在

从“帐户”模块:

    @api.model
    def _get_currency(self):
        currency = False
        context = self._context or {}
        if context.get('default_journal_id', False):
            currency = self.env['account.journal'].browse(context['default_journal_id']).currency_id
        return currency
这不太可能是问题所在,因为currency_id返回res.currency对象,只有当我进一步研究它时,才会得到错误的返回值

更新3:


似乎在事务创建期间未明确设置的货币设置为False,这可能是我的问题的根源。通过测试并替换为环境默认值来修复。

默认值的方法始终具有空记录集。应使用以下方法之一填充值:

  • 计算值并存储它(小提示:使用上下文中的日记账分录日期-->
    currency.with_context(date=).rate调用currency字段
    rate
    ,因为该字段是计算出来的,并且上下文日期被纳入计算中)

  • 重写创建/写入并尝试计算速率


我不知道with_上下文方法,这会很有用。我通过发送低级SQL查询所能达到的速度,因此此方法将使事情变得更简单。问题是,我得到的大多数id都是假的,而不是整数(我猜是未设置的)。我刚刚发现只有非显式设置的货币才有假id。现在来看看原因。