根据字段创建stock.location - Odoo v9社区

时间:2017-03-06 00:17:38

标签: python openerp odoo-9

我有这种方法,每次在Odoo v9社区中将stock.location类添加到新的汽车模型时,都应该创建一个新的fleet.vehicle

class fleet_vehicle(models.Model):
_inherit = 'fleet.vehicle'

@api.onchange('model_id')
def crear_location(self):
    self.env['stock.location'].search([('name', '=', self.model_id)])
    self.env['stock.location'].create({'name': self.model_id})
    return crear_location

location_id = fields.Many2one("stock.location", string="Almacén Origen", store=True, compute=crear_location)

但是,fleet.vehicle形式的字段只读,出于某种原因,我的意思是,我不能选择,也不能创建任何东西,只是在那里。

我在这里缺少什么?

修改

我通过将属性readonly=False放在location_id字段上来解决了这个问题,但仍然无法创建stock.location

1 个答案:

答案 0 :(得分:1)

有三件事可能导致问题:

1 / Odoo中的onchange仅返回警告,域或值。 有关详细信息,请参阅this post

2 / location_id具有'compute'属性,'compute'通常与@ api.depends一起使用,而不是onchange。 有关更多解释,请参阅this post

3 /在Odoo v9中,self是记录集,你应该使用for循环来访问单个记录

你应该尝试这样的代码(如果使用onchange,不需要使用计算机)

@api.onchange('model_id')
def crear_location(self):
    for record in self:
        location = self.env['stock.location'].search([('name', '=', record.model_id)])
        if not location:
            location = self.env['stock.location'].create({'name': record.model_id})
        record.location_id = location

location_id = fields.Many2one("stock.location", string="Almacén Origen")