2017-03-06 69 views
1

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

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=Falselocation_id现场解决问题,UT依然,没有任何创建stock.location

回答

1

有可能导致问题的三件事情:

1 /平变化在Odoo只返回警告,域或值。 请参阅this post以获得更多信息

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

3 /在Odoo V9,自我是记录,你应该使用循环访问单个记录

你应该试试你这样的代码(如果使用平变化,没有必要使用计算)

@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") 
+0

嗨,非常酷,但它是如何创建的?我应该将此方法添加到某个按钮或某个按钮吗?,location_id字段不会显示新的anthing,也不会使用此方法创建stock.location,我认为您是对的,但是如何使用它? ,对不起,只是想知道,再次感谢您 – NeoVe

+0

这就是为什么我使用计算,我知道这是不正确的,但位置应创建时,我保存记录以某种方式,我只是问,我应该打开一个新的题? – NeoVe

+0

要开一个新的问题,非常感谢你 – NeoVe

相关问题