2017-03-03 17 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') 

ありがとう!あなたはMany2oneクラス定義に/odoo/fields.pyにドキュメンテーション文字列を読めば

答えて

0

あなたはそれが表示されます。これはしていないので、あなたが値を引き出すために、ドット表記(RECORD.FIELD)を使用することができないことを意味

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

javascriptで実装されています。

だからあなたは動的にあなたが望むようなドメインを作成するために何ができるかです:

あなたはlocalvisitanteフィールドの値を設定し、ドメインを変更しますたびに呼び出されるのonchangeメソッドを作成します。 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を追加するとよいでしょう:

関連する問題