无论装饰器如何,记录集都是空的

Recordset is empty regardless of decorator

我正在尝试获取日记项目中的货币 ID,但出于某种原因我得到了一个 False 布尔值。

相关代码如下:

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, ...) 可能与默认属性有关,我想通了会更新。

更新二:

这里的主要问题是缺少货币,即使提供了有效的日记帐分录记录编号,它仍然存在

来自 'account' 模块:

    @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 return 是一个 res.currency 对象,只有当我进一步研究它时,我才得到 False return 值。

更新 3:

似乎在交易创建期间未明确设置的货币被设置为 False,这可能是我麻烦的根源。通过对其进行测试并替换为环境的默认设置来修复。

默认值的方法总是有一个空记录集。您应该通过以下方式之一填写该值:

  • 计算值并存储它(小提示:在上下文中使用日记账分录日期调用货币字段 rate --> currency.with_context(date=<journal_entry_date>).rate --> 因为这个字段被计算并且上下文日期被纳入计算)

  • 覆盖 create/write 并尝试计算速率