2016-09-02 34 views
2

我想用odoo9中的default_get API函数覆盖字段的默认值。如何使用odoo9中的default_get重写字段默认值?

我有这个在我的代码:

@api.model 
def default_get(self, fields_list): 
    res = super(hr_attendance, self).default_get(fields_list)     
    res.update({ 
       'animal': 'dog' 
       })  
    return res 

当我创建一个新的寄存器,出现在odoo日志此错误:

2016-09-02 11:33:36,680 27542 ERROR mydb openerp.http: Exception during JSON request handling. 
Traceback (most recent call last): 
    File "/etc/odoo/server/openerp/http.py", line 648, in _handle_exception 
    return super(JsonRequest, self)._handle_exception(exception) 
    File "/etc/odoo/server/openerp/http.py", line 685, in dispatch 
    result = self._call_function(**self.params) 
    File "/etc/odoo/server/openerp/http.py", line 321, in _call_function 
    return checked_call(self.db, *args, **kwargs) 
    File "/etc/odoo/server/openerp/service/model.py", line 118, in wrapper 
    return f(dbname, *args, **kwargs) 
    File "/etc/odoo/server/openerp/http.py", line 314, in checked_call 
    result = self.endpoint(*a, **kw) 
    File "/etc/odoo/server/openerp/http.py", line 964, in __call__ 
    return self.method(*args, **kw) 
    File "/etc/odoo/server/openerp/http.py", line 514, in response_wrap 
    response = f(*args, **kw) 
    File "/etc/odoo/server/addons/web/controllers/main.py", line 888, in call_kw 
    return self._call_kw(model, method, args, kwargs) 
    File "/etc/odoo/server/addons/web/controllers/main.py", line 880, in _call_kw 
    return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs) 
    File "/etc/odoo/server/openerp/api.py", line 250, in wrapper 
    return old_api(self, *args, **kwargs) 
    File "/etc/odoo/server/openerp/api.py", line 354, in old_api 
    result = method(recs, *args, **kwargs) 
    File "/etc/odoo/server/addons_extra/hr_attendance_extend/hr_attendance.py", line 79, in default_get 
    res.update({ 
AttributeError: 'tuple' object has no attribute 'update' 

我做错了吗?

编辑:我有另一个变量具有相同的名称挑衅冲突。 重命名变量,一切都很完美。

+1

奇怪的是'res'是一个元组。 'default_get'应该返回一个字典,代码应该可以工作。 – CZoellner

+1

您是否将模块的依赖设置为正确?你的模型是否从'hr.attendence'继承?似乎你的超级通话什么都不做。 – CZoellner

+1

@CZoellner回顾所有的代码,我意识到我有另一个名为“res”的变量(sql查询执行的结果)。由于这个原因,我在代码中发生了冲突。 我已经重新命名了变量,现在,原始代码完美地工作。 我的错。感谢您的帮助:) – MouTio

回答

2

update是字典数据类型的一种方法。你正试图用元组数据类型来使用它。这就是你得到错误的原因。

尝试用下面的代码:

@api.model 
def default_get(self, fields): 
    res = super(hr_attendance, self).default_get(fields) 
    res['animal'] = 'dog' 
    return res 
+0

项目分配为什么要在元组上工作? – CZoellner

+0

@CZoellner,你是对的。 'default_get'应该返回字典。根据错误,我写了答案。在适当的时候,我会执行同样的事情来重现它。 –

+0

我的错。我有另一个同名的变种。原来的代码工作正常,你的代码也是。我已经测试了两种代码。感谢你的回答 :) – MouTio