2017-01-24 7 views
0

私はOdoo 9用のモジュールを開発しています。私は "job_id"というフィールドを持っています。これは、私のレコードを識別するために使用される一意の自動インクリメント整数フィールドであると考えられています。私は "account_id"という別のフィールドを持っています。これは、res.partnerとの関係を持つMany2Oneです。 job_idはaccount_idにのみ一意です。Odoo 9、self.pool.getを使用してレコードIDを取得するにはどうすればよいですか?

私の目標は、計算するのjob_idで、将来のインクリメントのためにを保存することです。 account_idが変更されたとき、またはフォームが作成されたときのいずれかです。現時点では、関数をcreateメソッドの中で実行しています。 Odooシェル内部


、私は以下のようなものをした場合、それが働いていたが、私は私のモジュールに追加したときに、それはモデルが「ENV」属性を持っていないことを言ってエラーが発生したことがわかりました。

def make_job_id(self, cr, uid, vals, context=None): 
    if context is None: 
     context = {} 
    job_ids = [] 
    ids = self.env['custom.custom'].search([('account_id','=',vals['account_id'])]) # Search the custom.custom model for all records who's account_id matches this record's account_id and return object IDs 
    fields = ids.fields_get('job_id') # Get python field descriptor, always returns id + whatever specified fields 
    jobs = ids.read(fields) # Read the value of the supplied fields for each record 

    if len(jobs) > 0: 
     for i in jobs: 
      if i.job_id not in job_ids: 
       job_ids.append(i.job_id) 
     job_ids = max(job_ids) + 1 
    else: 
     job_ids = 1 
    vals['job_id'] = job_ids 
    return vals['job_id'] 

正確にenvが利用可能になったときにOdooが嫌なことが判明した後、私は自分の機能を以下に変更しました。

代わりの

ids = self.env bla bla bla
私は他に何もログにすべてのこれらの変数の値は、単に出力のデバッグ行を追加することを除いて、私の機能と変更されてい
ids = self.pool.get('custom.custom').search(cr, uid, [('account_id','=',vals['account_id'])], context=context)

をしています。


私は私の最初のレコードを作成するときに、私は何の問題を取得していないし、私のログはこのことを示しています

:そのアカウントの新しいレコードを作成するときに

 
2017-01-24 18:49:23,211 7875 DEBUG [redacted database] openerp.addons.custom.models.models: ####### make_job_id, the_ids: [] 
2017-01-24 18:49:23,212 7875 DEBUG [redacted database] openerp.addons.custom.models.models: ####### make_job_id, job_ids: 1 
2017-01-24 18:49:23,212 7875 DEBUG [redacted database] openerp.addons.custom.models.models: ####### make_job_id, vals[job_id]: 0 
2017-01-24 18:49:23,213 7875 DEBUG [redacted database] openerp.addons.custom.models.models: ####### make_job_id, vals[job_id]: 1 

はしかし、私は次のトラックバックを取得

2017-01-24 18:50:05,412 7875 DEBUG [redacted database] openerp.addons.custom.models.models: ####### make_job_id, the_ids: [1] 
2017-01-24 18:50:05,414 7875 ERROR [redacted database] openerp.http: Exception during JSON request handling. 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 643, in _handle_exception 
    return super(JsonRequest, self)._handle_exception(exception) 
    File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 680, in dispatch 
    result = self._call_function(**self.params) 
    File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 316, in _call_function 
    return checked_call(self.db, *args, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/openerp/service/model.py", line 118, in wrapper 
    return f(dbname, *args, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 309, in checked_call 
    result = self.endpoint(*a, **kw) 
    File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 959, in __call__ 
    return self.method(*args, **kw) 
    File "/usr/lib/python2.7/dist-packages/openerp/http.py", line 509, in response_wrap 
    response = f(*args, **kw) 
    File "/usr/lib/python2.7/dist-packages/openerp/addons/web/controllers/main.py", line 892, in call_kw 
    return self._call_kw(model, method, args, kwargs) 
    File "/usr/lib/python2.7/dist-packages/openerp/addons/web/controllers/main.py", line 884, in _call_kw 
    return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/openerp/api.py", line 250, in wrapper 
    return old_api(self, *args, **kwargs) 
    File "/usr/lib/python2.7/dist-packages/openerp/addons/custom/models/models.py", line 593, in create 
    vals['job_id'] = make_job_id(self, cr, uid, vals, context=context) 
    File "/usr/lib/python2.7/dist-packages/openerp/addons/custom/models/models.py", line 569, in make_job_id 
    the_fields = the_ids.fields_get('job_id') 
AttributeError: 'list' object has no attribute 'fields_get' 

私が見ているのは、 "self.pool.get" はありません。は "self.env"のようにidを持つオブジェクトを返しますが、代わりに単にidを返します。

self.pool.getで提供されているIDを使用できるようにするにはどうすればよいですか?

答えて

0

「検索」メソッドは、idsのみを返し、オブジェクトは返しません。実際のオブジェクトを取得するために「検索」の後に「ブラウズ」メソッドを使用してみてください。 objs = self.pool.get('custom.custom').browse(cr, uid, ids, context=context)

+0

遅くとも返事を言いたいことがありました。検索で返されたIDを使ってブラウズを追加すると、本当にうまくいきました。私は問題を引き起こし始めた小さなものを見つけました。何らかの理由で私はもはやids.job_idを実行できなくなりましたが、ids ['job_id']は完全に機能しました! –

関連する問題