运行OpenERP函数时出现`KeyError: id`

0 投票
1 回答
2070 浏览
提问于 2025-04-18 06:58

我想在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'

我试着把returndomain改成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>}

希望这能帮到你。

撰写回答