如何在Odoo 13中将现有的相关字段转换为计算字段?

问题描述

我有这个现有字段:

picking_code = fields.Selection(
    related='picking_id.picking_type_id.code',readonly=True,)

我想继承它,删除related参数并添加一个compute以根据某些条件设置其值。

我的尝试:

@api.depends('picking_id','picking_id.picking_type_id','picking_id.picking_type_id.code','move_id','move_id.picking_type_id','move_id.picking_type_id.code')
def _compute_picking_code(self):
    _logger.critical('NEVER EXECUTES THIS' * 80)
    for line in self:
        if line.picking_id:
            line.picking_code = line.picking_id.picking_type_id.code
        else:
            line.picking_code = line.move_id.picking_type_id.code

picking_code = fields.Selection(
    related=False,compute='_compute_picking_code',)

问题是该计算方法从未执行,并且出现以下错误,这是有道理的,因为如果不执行该计算方法,则不会将选择值设置为该字段:

AssertionError:字段stock.move.line.picking_code没有选择---

解决方法

已解决,如果有人对此主题感兴趣,那么它是一个Selection字段,因此,如果删除related参数,则必须再次指定selection参数的元组列表

picking_code = fields.Selection(
    selection=[
        ('incoming','Receipt'),('outgoing','Delivery'),('internal','Internal Transfer'),],compute='_compute_picking_code',related=False,readonly=True,)