我的代码:
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)代替
那应该可以解决问题-让我们知道,如果那也不起作用。