2014-05-19 1 views
0

OpenERP7에 페이지가로드 될 때 함수를 실행하려고합니다. 함수는 many2one 컨트롤로 돌아가려고하는 사전을 만듭니다.OpenERP에서 함수를 실행할 때`KeyError : id`

여기 내 함수 코드입니다.

class deg_form(osv.osv): 

    _name = "product.product" 
    _inherit = "product.product" 
    _columns = { 
     'categ_temps':fields.many2one('product.category','Parent'),  
      } 

    def myfunc_name(self,cr,uid,ids,context=None): 
     domain=[] 
     cr.execute('select id,name from product_category where parent_id is NULL') 
     res=cr.fetchall() 
     for pid,name in res: 
      domain.append((pid)) 
      print name 
      return {'domain':{'categ_temps':[('id','in',domain)]}}   

    _defaults = {'name':'.','categ_temps':myfunc_name} 

deg_form() 

_defaults에서 기능을 실행하려고합니다. 내 카테고리에는 내가 채우고 싶은 필드에 대한 세부 정보가 있습니다. 내 페이지를로드하려고 할 때, 나는이 오류를 얻을 : 나는 valuedomain에서 내 return을 변경 시도

select = map(lambda x: isinstance(x, dict) and x['id'] or x, select) 
KeyError: 'id' 

. 나는 또한 함수 on_change을 사용하려고 시도했다. 그것은 필자에게 필요한 결과를 주었지만, 필자는 드롭 다운 값을 변경 한 후에 결과를 얻었다.

나는 당신이 ('값', '도메인'또는 '경고'와 DICT) on_change 방법에 대한 뭔가를 반환하려는

답변

0

을해야 그 밖의 무엇을 잘 모르겠지만, 당신은 그것을 반환 할 수 없습니다 필드 기본 설정과 비슷합니다. 당신이 스택 트레이스에서 볼 수

select = map(lambda x: isinstance(x, dict) and x['id'] or x, select) 

프레임 워크는 int를 가져 오려고 시도하거나 사전 인 경우에 키 'ID'의 값을 얻기 위해 시도합니다. 둘 다 제공하지 마십시오. many2one 필드이므로 함수는 기본값으로 갖고 싶은 테이블 레코드의 id를 반환해야합니다. 그래서 몇 가지 코드와 함께, 당신은 정교한 수 있다면 그것이 당신에게

+0

도와 줄게 간단한 ID 또는 {'id':<here_your_id>}

희망 같은 사전을 반환합니다. 나는'id'를 얻기 위해 사전을 수정하려고했지만 여전히 같은 오류가 발생합니다. 또한 나는 이해하지 못한다. 나는 onchange에 대해 같은 코드를 가지고 있지만 작동했다. 나는 아무것도 변경하지 않았으므로, 페이지의 처음로드시에도 id를 반환해야합니다. –

+0

ok first : 당신은 _defaults에있는 함수를 사용하여 ID를 얻지 않을 것입니다. (알고있는 한, 디버그 해보십시오; EDIT : 명확히하기 위해, 함수의 매개 변수 ID를 의미합니다). 둘째 : onchange를 사용하지 않으므로 onchange 반환 동작을 사용할 수 없습니다. _defaults에서 사용되는 함수는 단일 ID (순수한 정수 이상) 또는 { 'id': }와 같은 사전을 반환해야합니다. – CZoellner

관련 문제