【问题标题】:Recordset is empty regardless of decorator无论装饰器如何,记录集都是空的
【发布时间】:2019-11-28 09:53:41
【问题描述】:

我正在尝试获取日记项目中的货币 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, ...) 可能与默认属性有关,我会在我弄清楚时更新。

更新 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 对象,只有当我进一步研究它时,我才会得到 False 返回值。

更新 3:

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

【问题讨论】:

    标签: odoo odoo-12


    【解决方案1】:

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

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

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

    【讨论】:

    • 我不知道 with_context 方法,它会派上用场。我通过发送低级 SQL 查询能够达到的速率,因此这种方法将使事情变得更容易。问题是我得到的大多数 ID 都是 False 而不是整数(我猜是未设置)。
    • 刚刚发现只有非明确设置的货币被赋予了一个 False id。现在找出原因。
    猜你喜欢
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    相关资源
    最近更新 更多