2014-11-18 2 views
1
에서 SELECTE 값

내 코드 :IndexError : 범위를 벗어난리스트 인덱스 때 openerp

class kho(osv.osv): 
    _name = "tt_kho" 
    _columns = { 
     'name': fields.char('Mã nguyên liệu ',size=20,required=True), 
     'ten': fields.char('Tên nguyên liệu',size=100,required=True), 
     'loai': fields.char('Loại vật liệu',size=100,required=True), 
     'soluong':fields.integer('Số lượng hiện có',required=True), 
    } 
class nguyenlieu(osv.osv): 
    _name = "tt_nguyenlieu" 
    _columns = { 
     'name': fields.many2one('tt_kho','Mã nguyên liệu',required=True), 
     'ten': fields.char('Tên nguyên liệu',size=100,required=True), 
     'loai': fields.char('Loại vật liệu',size=100,required=True), 
     'soluong':fields.integer('Số lượng cần',required=True),} 
    def onchange_ten(self,cr,uid,ids,name,context=None): 
      value={} 
      if name: 
       record_id=self.pool.get('tt_kho').search(cr,uid,[('name','=',name)],context=context) 
       record=self.pool.get('tt_kho').browse(cr,uid,record_id[0],context=context) 
       value['ten']=record.ten 
      else: 
       value['ten']=None 
      return {'value':value} 
nguyenlieu() 

내 xml 파일 :

여기
<record id="nlform" model="ir.ui.view"> 
      <field name="name">Nguyên liệu</field> 
      <field name="model">tt_nguyenlieu</field> 
      <field name="type">form</field> 
      <field name="arch" type="xml"> 
        <form> 
         <group col="2"> 
          <field name="name" on_change="onchange_ten(name)"/> 
          <field name="ten"/> 
          <field name="loai"/> 
          <field name="soluong"/> 
         </group> 
        </form> 
      </field> 
     </record> 

는 오류 :

Traceback (most recent call last): 
File "C:\openerp-8.0rc1\openerp\addons\DoanERP\core.py", line 24, in onchange_ten 
record=self.pool.get('tt_kho').browse(cr,uid,record_id[0],context=context) 
IndexError: list index out of range 

내가 선택 "Nguyên liệu"형식의 값 이름.이 오류가 발생합니다.

일부 코드를 추가했지만 오류 표시가 없지만 tt_kho에서 레코드 ID를 가져올 수없는 것 같습니다. 'haha'만 표시됩니다.

def onchange_ten(self,cr,uid,ids,name,context=None): 
     value={} 
     if name: 
      record_id=self.pool.get('tt_kho').search(cr,uid,[('name','=',name)],context=context) 
      if record_id: 
       record=self.pool.get('tt_kho').browse(cr,uid,record_id[0],context=context) 
       value['ten']=record.ten 
      else: 
       value['ten']='haha' 
     else: 
      value['ten']=None 
     return {'value':value} 
+0

'record_id'는 그 오류가있는 빈 목록을 제공합니다. 검색 기준을 확인하십시오. 최소한 1 ID를 반환해야합니다. 그래서'record_id [0]' –

답변

2

Odedra 바로,하지만 난 두 가지를 지적하고 싶습니다

  • 필드 이름을 사용하는 many2one 문제가 많이 발생할 수로 알고 있어야 - odoo의 이름을 메인으로 간주됩니다 필드로 필터링합니다.
  • many2one 필드에서 onchange를 수행 할 때 검색 할 수있는 값을 얻지 못함 - _logger.warn (name)을 사용하여 어떤 값을 얻었는지 확인 - 이름 대신 ID를 얻음 단지) 것을 확인, 그래서 당신은 검색을 라인을 건너 뛰고 기록 = self.pool.get ('tt_kho')를 사용 갈까요. 검색 (CR, UID, 이름, 문맥 = 문맥) 대신

을 그 트릭을해야합니다 - 만약 작동하지 않는다면 우리에게 알려주십시오.

+0

을 사용할 수 있습니다. 지금은 잘 작동합니다. 도와 주셔서 감사합니다. – RyoGin