在 Odoo v11 中无法从 partner_id.id 获取 ID

cannot get ID from partner_id.id in Odoo v11

我在 Odoo 中从 rest.partner 获取 ID 时遇到了一些问题。我在 stock.move.line 中添加了名为 irLot 的计算字段。下面是代码示例。

class StockMoveLine(models.Model):
_inherit = 'stock.move.line'

irLot = fields.Char(string="Internal Reference", compute='_compute_ir')


def _compute_generate_lot(self):
    
    partner_id = self.picking_id.partner_id.id
    partner_obj = self.env['res.partner']
    obj = partner_obj.search([('id','=',partner_id)])
    
    for rec in obj:
        internal_ref = rec.ref
         
    self.irLot = internal_ref 

所以我的问题是当我分配给 partner_id 变量时。即使我分配了 self.picking_id.partner_id.id,也没有任何价值出现。总是显示 False。所以我直接分配了id,效果如下。

 partner_obj = self.env['res.partner']
 obj = partner_obj.search([('id','=','112')])

我做错了什么? 对 odoo 非常菜鸟,请给我建议。

irLot依赖于picking_id的值,需要用api.depends()装饰器指定。

If it uses the values of other fields, it should specify those fields using depends()

您可以参考Computed fields文档。

默认的 picking_idpartner_id 不是强制性的,因此在尝试获取它们的值之前检查它们是否已设置。 self.picking_id.partner_id当它被设置为一个记录集时,你不需要使用它来搜索id,你已经有它作为记录了。

您无法设置记录集上字段的值 self.irLot = internal_ref,请尝试遍历 self 并为每条记录设置值。

class StockMoveLine(models.Model):
    _inherit = 'stock.move.line'

    irLot = fields.Char(string="Internal Reference", compute='_compute_ir')

    @api.depends('picking_id')
    def _compute_generate_lot(self):
        for sml in  self:
            if sml.picking_id and sml.picking_id.partner_id:
                sml.irLot = sml.picking_id.partner_id.internal_ref