2016-08-10 13 views
0

私はモデル "news.ads"と "blog.post"の両方でmany2manyフィールド "tag_ids"を持っています。2つのmany2manyフィールドがodoo9で正確に等しいかどうかをチェックする方法は?

「news.ads」の「tag_ids」と「tag_ids」が完全に一致する「blog.post」からすべてのレコードを取得したいとします。

私は私のコントローラで、次を試してみましたが、私がodoo9で、このようなレコードを検索するにはどうすればよい、

blog_obj = request.registry['blog.post'] 

p_id = blog_obj.search(cr, uid, ['&', ['id','=',post_id], ['website_published', '=', True]], context=context) 

post = blog_obj.browse(cr, uid, p_id, context=context) 


ad_obj = request.registry['news.ads'] 

banner_ads = ad_obj.search(cr, uid, [('state', '=', 'publish'), ('tag_ids', 'in', [post.tag_ids])], context=context) 

を働いていないのですか?任意の回避策.. !!

答えて

-1

注1:ODOO-8の古いAPIを使用せず、ODOO-9

まず相:

我々は.idsを使用しているすべてのmany2many IDリストを取得するには、リストを返します。

第二相:

状況:我々は2つのリストを持っている、とあなたは、彼らが最初のリストにある場合、第二のリストから項目を取得したいです。

>>> a 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
>>> b 
[2, 3, 5, 6, 7, 13] 
>>> c = [x for x in b if x in a] 
>>> c 
[2, 3, 5, 6, 7] 

注2:私はodoo-8 developersです。古いAPIを使用した

1

、検索が既に一致するレコードのIDのリストを返すので、再び閲覧呼び出す必要はありません、あなたはあなたのドメインフィルタに直接で

blog_obj = request.registry['blog.post'] 

p_id = blog_obj.search(cr, uid, ['&', ['id','=',post_id], ['website_published', '=', True]], context=context) 

# post = blog_obj.browse(cr, uid, p_id, context=context) you don't need this 

ad_obj = request.registry['news.ads'] 

banner_ads = ad_obj.search(cr, uid, [('state', '=', 'publish'), ('tag_ids', 'in', p_id)], context=context) 

を返されたリストを使用することができます検索がレコードセットを返すようになったので、今度はレコードセットが返されるので、新しいapiは非常にお勧めです。検索がレコードセットを返すようになりました。

p_id = blog_obj.search(['&', ['id','=',post_id], ['website_published', '=', True]]) 

p_id = [p.id for p in p_id] 
関連する問題