Python `KeyError:id`在OpenERP上运行函数时

Python `KeyError:id`在OpenERP上运行函数时,python,openerp,openerp-7,Python,Openerp,Openerp 7,当页面加载到OpenERP7上时,我正在尝试运行一个函数。函数创建一个字典,我试图将其返回到manyOne控件 这是我的函数代码 class deg_form(osv.osv): _name = "product.product" _inherit = "product.product" _columns = { 'categ_temps':fields.many2one('product.category','Parent'),

当页面加载到OpenERP7上时,我正在尝试运行一个函数。函数创建一个字典,我试图将其返回到manyOne控件

这是我的函数代码

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()
我正在尝试从默认值运行函数。我的类别包含有关我要填充的字段的详细信息。当我尝试加载页面时,出现以下错误:

我尝试将我的返回值从域更改为值。我也试着用函数来改变。这给了我所需的结果,但在我更改了下拉值之后


我不确定我还应该做些什么

您正试图用“值”、“域”或“警告”为on_change methods dict返回某些内容,但对于字段默认值,您不能这样返回。 正如你在stacktrace中看到的

select = map(lambda x: isinstance(x, dict) and x['id'] or x, select)
框架尝试获取int,或者如果是字典,则尝试获取键“id”的值。 你两个都不提供。 由于它是一个manyOne字段,因此函数必须返回要作为默认值的表记录的id。因此,返回一个简单的id或类似{'id':}的字典


希望这能帮助您

如果您可以详细说明,并提供一些代码。我试图修改我的字典以获取id,但仍然出现相同的错误。我也不明白,我有相同的代码,但它的onchange工作。我没有做任何更改,所以在第一次加载页面时它也应该返回id。首先,确定:据我所知,使用默认值中的函数无法获取id,请尝试调试它;编辑:为了清楚起见,我指的是函数中的参数ID。第二:这里没有使用onchange,所以不能使用onchange返回行为。在_defaults中使用的函数必须返回单id纯整数或类似于{'id':}的字典。
select = map(lambda x: isinstance(x, dict) and x['id'] or x, select)