2011-11-24 4 views
0

하나의 변수 var_x가 fct1에 있습니다. 제가 동일한 클래스 코드에 다른 기능 fct2에서 동일한 변수 값을 사용할 :openerp에서 같은 클래스의 다른 함수에서 하나의 함수 변수를 사용하는 방법은 무엇입니까?

여기
def onchange_blockcreate(self, cr, uid, ids, block): 
    global family_code_id 
    global varname   
    if block: 
     cr.execute ('select activefrom,activeto from new_block where id=%s ',(block,))    
     family_code_id =cr.fetchone()[0]    
    msgalert = {'title':'Warning','message':} 
    return {'warning':msgalert} 
def onchange_evaluation_date(self, cr, uid, ids,family_code_id,activefrom): 
    print activefrom 
    print family_code_id 
    if activefrom>=family_code_id: 
     print activefrom   
    else : 
     msgalert = {'title':'Warning','message':'fieldtocheck is too short!'} 
     return {'warning':msgalert} 

family_code_id가 제 기능에 사용되며, 또한 제 기능 동일 family_code_id 사용할. 하지만 오류가 있습니다 :

global variable family_code_id is not defined.

openerp에서 어떻게 가능합니까?

+0

코드의 형식을 수정하십시오. 들여 쓰기 당 4 개의 공백을 사용하십시오. 탭과 스페이스를 혼용하지 마십시오. – eryksun

답변

0

아마도 전역 변수를 사용할 수 있지만 일반적으로 더 좋은 방법이 있습니다.

첫 번째 제안은 family_code_id 필드를 모두 on_change 이벤트로 전달하는 것입니다. 두 번의 통화 사이에 클라이언트에서 변경 될지 걱정됩니까? 그렇지 않다면 onchange_blockcreate() 메소드에 family_code_id 매개 변수를 추가하고 XML 파일의 on_change 속성의 필드 목록에 family_code_id을 추가하십시오.

전역 변수를 사용하기로 결정했다면 두 방법 모두에서 전역 변수를 선언하고 onchange_evaluation_date() 메서드로 할당해야합니다. 전역 변수는 일반적으로 나쁜 생각이며 클래스 멤버 변수가 일반적으로 더 좋습니다. OpenERP 모델 클래스는 싱글 톤이기 때문에 어떤 상태도 유지하고 싶지는 않습니다. 모든 것이 메서드 매개 변수를 통해 이루어져야합니다.

+0

도움 주셔서 감사합니다. don.i 더 많은 아이디어를 얻었습니다. –

0

당신은 클래스 LABLE

처럼 ----> 글로벌 family_code_id에서 그 변수를 정의 할뿐만 아니라 클래스 레이블로 다음 당신을 당신은 클래스 내부의 변수를 정의해야 제대로

0

일을하고있다 self.variable_name을 호출하여 클래스 내의 모든 함수에서 해당 데이터를 검색 할 수 있습니다.