如何更正模型中的过滤字段域?

时间:2017-03-03 15:11:07

标签: openerp odoo-10

我尝试使用同一型号的其他字段值过滤字段时出现以下错误。

  

文件   " /选择/..../ tfutbol /模型/ partido.py&#34 ;,   第29行,在Partido       figura = fields.Many2one(' tfutbol.jugador',domain = [(' equipo_id',' =',local.id)])   RuntimeError:调用Python时超出了最大递归深度   对象

尝试解决问题的代码行是:

figura = fields.Many2one('tfutbol.jugador',domain=[('equipo_id','=',local.id),('equipo_id','=',visitante.id)])

所有相关代码均在上面:

class Partido(models.Model):
    _name = 'tfutbol.partido'

    local = fields.Many2one('tfutbol.equipo')
    visitante = fields.Many2one('tfutbol.equipo')
    figura = fields.Many2one('tfutbol.jugador',domain=[('equipo_id','=',local.id),('equipo_id','=',visitante.id)])

class Equipo(models.Model):
    _name = 'tfutbol.equipo' 

    name = fields.Char('Nombre')

    jugador_ids = fields.One2many('tfutbol.jugador', 'equipo_id', string="Jugadores")

class Jugador(models.Model):
    _name = 'tfutbol.jugador'

    name = fields.Char('Nombre')
    equipo_id = fields.Many2one('tfutbol.equipo')

感谢阅读!

1 个答案:

答案 0 :(得分:0)

如果您在Many2one类定义上阅读/odoo/fields.py上的docstring,您会看到:

  

:param domain:一个可选的域,用于设置候选值           客户端(域名或字符串)

这意味着你不能使用点符号(record.field)来提取值,因为这还没有在javascript上实现。

那么你可以做些什么来动态创建一个你想要的域:

创建一个onchange方法,每次在localvisitante字段上设置值时都会调用该方法,并会更改figura字段中的域。例如:

@api.onchange('figura','visitante')
def onchange_method(self):
      domain = {}
      domain['figura'] = [('equipo_id','=',self.local.id),('equipo_id','=',self.visitante.id)]
   return {'domain': domain}

注意:如果未在具有多个叶子(参数)的域中设置运算符,则会添加显式AND,因此在您的域中,您搜索的equipo_id字段等于self .local.id和self.visitante.id不起作用,你可能想添加一个OR:

['|',('equipo_id','=',self.local.id),('equipo_id','=',self.visitante.id)]