2017-03-03 57 views
0

我收到以下錯誤,試圖通過同一模型的另一個字段值篩選字段。如何更正模型中的過濾器字段域?

File "/opt/..../tfutbol/models/partido.py", line 29, in Partido figura = fields.Many2one('tfutbol.jugador',domain=[('equipo_id','=',local.id)]) RuntimeError: maximum recursion depth exceeded while calling a Python object

的代碼的問題試圖線路是:

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

如果您在Many2one類定義上/odoo/fields.py閱讀文檔字符串你會看到:

:param domain: an optional domain to set on candidate values on the client side (domain or string)

這意味着你不能用點號(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} 

注意:當你不設置與多個葉子(參數)域運營商明確並添加,所以在您的域名您正在搜索的歸檔相等的equipo_id self.local.id和self.visitante.id這將無法正常工作,您可能需要添加一個OR:

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