问题描述
我在从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_id
和partner_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