我尝试使用同一型号的其他字段值过滤字段时出现以下错误。
文件 " /选择/..../ 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')
感谢阅读!
答案 0 :(得分:0)
如果您在Many2one类定义上阅读/odoo/fields.py
上的docstring,您会看到:
:param domain:一个可选的域,用于设置候选值 客户端(域名或字符串)
这意味着你不能使用点符号(record.field)来提取值,因为这还没有在javascript上实现。
那么你可以做些什么来动态创建一个你想要的域:
创建一个onchange方法,每次在local
和visitante
字段上设置值时都会调用该方法,并会更改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)]