在 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_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
我在 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_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