在KeyERP上运行函数时出现`KeyError:id`

时间:2014-05-19 06:56:33

标签: python openerp openerp-7

我试图在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 :(得分:0)

您正在尝试为on_change方法返回一些内容(dict with' value',' domain'或' warning'),但您可以&# 39; t返回它,就像字段默认值一样。 正如你在stacktrace中看到的那样

select = map(lambda x: isinstance(x, dict) and x['id'] or x, select)

框架尝试获取int或者如果字典试图获取key&#39; id&#39;的值。 你没有提供他们。 因为它是一个many2one字段,所以你的函数必须返回你想要的表记录的id作为默认值。所以返回一个简单的id或字典,如{'id':<here_your_id>}

希望能帮到你