2016-09-02 14 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' 

私が間違っているのか?

編集:私は競合をprovoqued同じ名前の別の変数を持っていた。 変数の名前を変更すると、すべてが完璧に機能します。

+1

'res'がタプルであることを奇妙な:

は、次のコードを試してみてください。 'default_get'はディクショナリを返さなければなりません。 – CZoellner

+1

モジュールの依存関係を正しく設定しましたか?あなたのモデルは 'hr.attendence'から継承していますか?スーパーコールが何もしないようです。 – CZoellner

+1

@CZoellnerすべてのコードを見て、私は "res"(SQLクエリ実行の結果)という別の変数があることに気付きました。このため、コードに矛盾がありました。 私はvarsの名前を変更しました。元のコードは完全に機能します。 私のせいです。助けてくれてありがとう:) – 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

私のせいです。私は同じ名前の別のvarを持っています。元のコードは正常に動作し、コードも正常に動作します。私は両方のコードでテストしました。答えをありがとう:) – MouTio

関連する問題