IndexError:在openerp中选择值时列出索引超出范围

时间:2014-11-18 07:47:47

标签: python python-2.7 openerp openerp-7

我的代码:

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êlinệu”表格中选择值名称时,会出现此错误。

我添加了一些代码而没有显示错误,但看起来它无法从tt_kho获取记录ID。它只显示'哈哈'。

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}

1 个答案:

答案 0 :(得分:2)

Odedra是对的,但我想指出两件事:

  • 请注意,使用字段名称为many2one可能会造成很多麻烦 - odoo中的名称被视为要过滤的主要字段。
  • 当您对many2one字段进行onchange时,您将无法获得可以使用的值 - 使用_logger.warn(名称)来查看,您获得了什么值 - 您将获得一个id而不是一个名称(刚检查一下),所以你应该跳过搜索行并使用record = self.pool.get(&#39; tt_kho&#39;)。browse(cr,uid, name ,context =上下文)而不是

这应该是诀窍 - 让我们知道,如果那也不起作用。