如何处理Odoo 8中的瞬态模型中的相关和计算字段?

时间:2016-10-24 17:01:04

标签: xml python-2.7 odoo-8 odoo

我有一个我无法理解的问题。我在模型stock.production.lot中添加了两个新字段。这些字段是计算浮点数,并且工作完美。他们的名字是current_qtyexpected_qty

然后,我创建了一个瞬态模型。在这一个中,我创建了一个指向模型lot_id的many2one字段stock.production.lot。我添加了两个名为current_qtyexpected_qty的浮点字段,它们与我上面提到的各个字段相关。

问题是只有current_qty获得正确的值(另一个总是为零)。

示例:

我创造了很多。执行此操作时,计算current_qty并计算值10.000,并计算expected_qty,值为5.000。

现在我打开瞬态模型,current_qty得到10.000,这是正确的,但expected_qty得到False。为什么呢?

即使我已将其他字段添加到瞬态模型中。这个是一个计算字符,它应该显示下一个: current_qty(expected_qty),按照这个例子的值,它应该是 10.000(5.000)。但它也需要False值(它不会写current_qty)。此外,我在compute方法中编写日志消息,以检查方法是否被调用以及它采用了哪些值。令人惊讶的是,日志中显示的current_qtyexpected_qty的值是正确的! (10.000和5.000)。

Python代码

class ProductLotAvailable(models.TransientModel):
    _name = 'product.lot.available'

    @api.multi
    @api.depends('current_qty', 'expected_qty')
    def _compute_beautiful_qty(self):
        for available_lot in self:
            current_qty = str(available_lot.current_qty)
            _logger.info(current_qty)
            expected_qty = str(available_lot.expected_qty)
            _logger.info(expected_qty)
            available_lot.beautiful_qty = current_qty + '(' + expected_qty + ')'

    lot_id = fields.Many2one(
        comodel_name='stock.production.lot',
        string='Lot',
        readonly=True,
    )
    current_qty = fields.Float(
        related='lot_id.current_qty',
        string='Current lot quantity',
        readonly=True,
        digits=dp.get_precision('Product Unit of Measure'),
    )
    expected_qty = fields.Float(
        related='lot_id.expected_qty',
        string='Expected lot quantity',
        readonly=True,
        digits=dp.get_precision('Product Unit of Measure'),
    )
    beautiful_qty = fields.Char(
        compute='_compute_beautiful_qty',
        string='Current lot quantity',
        readonly=True,
    )

XML代码

<field name="product_lots_available" nolabel="1">
    <tree create="false" delete="false" editable="bottom">
        <field name="current_qty" invisible="0"/>
        <field name="expected_qty" invisible="0"/>
        <field name="beautiful_qty"/>
        <field name="lot_id"/>
    </tree>
</field>

任何人都可以帮我吗?我的代码中可能存在一个我在过去几小时内无法看到的简单错误。

2 个答案:

答案 0 :(得分:2)

我想的唯一原因是因为它是相关字段,所以只有在保存该记录后才会放置该字段中的值。并且因为此模型是瞬态模型,因此向导正在打开,但您无法再次打开相同的记录来验证结果。

要验证它是否转到数据库并检查记录,您将获得该值。对于双重确定,只需保持这两个字段功能Store = False,因此值将始终存在。

我的代码中没有发现任何其他问题。

答案 1 :(得分:1)

我发现了问题:我安装了另一个模块,它覆盖了加载瞬态模型默认值的方法。此方法填写current_qty,但不填写expected_qty。与beautiful_qty相同的问题。

因此,尽管我正在介绍我需要的值,但它们被其他模块覆盖了。