我的代码:

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ênliệ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}

最佳答案

Odedra是正确的,但我想指出两点:


请注意,使用字段名称many2one可能会造成很多麻烦-odoo中的名称被认为是要过滤的主要字段。
当您对many2one字段进行onchange时,您将不会获得可以使用以下方法搜索的值-使用_logger.warn(name)查看所获得的值-您将获得id而不是名称(只需检查一下),因此您应该跳过搜索行并使用record = self.pool.get('tt_kho')。browse(cr,uid,name,context = context)代替


那应该可以解决问题-让我们知道,如果那也不起作用。

10-01 22:59
查看更多