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

问题描述

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

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()装饰器进行指定。

如果使用其他字段的值,则应使用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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...