2017-03-03 2 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)

자바 스크립트에 구현되었습니다.

그래서 당신이 동적으로 원하는 것과 같은 도메인을 만들기 위해 무엇을 할 수 있습니다 :

당신이 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가 작동하지 않을 경우 다음을 추가 할 수 있습니다.