运行OpenERP函数时出现`KeyError: id`
我想在OpenERP7的页面加载时运行一个函数。这个函数会创建一个字典,我想把这个字典返回给我的many2one控件。
这是我函数的代码。
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
中运行这个函数。我的分类里有关于我想填充的字段的详细信息。但是当我尝试加载页面时,我遇到了这个错误:
select = map(lambda x: isinstance(x, dict) and x['id'] or x, select)
KeyError: 'id'
我试着把return
从domain
改成value
。我还尝试使用on_change
这个函数,虽然这样得到了我想要的结果,但在我改变下拉菜单的值后就不再有效了。
我不太确定还应该做些什么。
1 个回答
0
你想在 on_change 方法中返回一些东西(比如包含 'value'、'domain' 或 'warning' 的字典),但是对于字段默认值来说,不能这样返回。正如你在错误信息中看到的那样。
select = map(lambda x: isinstance(x, dict) and x['id'] or x, select)
框架会尝试获取一个整数,或者如果是字典的话,会尝试获取 'id' 这个键的值。可你都没有提供这两者中的任何一个。由于这是一个 many2one 字段,你的函数需要返回你想要作为默认值的表记录的 id。所以你需要返回一个简单的 id,或者像这样一个字典 {'id':<这里是你的_id>}
。
希望这能帮到你。