如何检查odoo9中两个many2many字段是否完全相同?

时间:2016-08-10 10:34:14

标签: openerp odoo-8 odoo-9 odoo-website

我在模型“news.ads”和“blog.post”中都有很多字段“tag_ids”。

我想从“blog.post”获取所有记录,其“tag_ids”与“news.ads”中的“tag_ids”完全匹配。

我在我的控制器中尝试了以下操作,但它没有用,

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)

如何在odoo9中搜索此类记录?任何解决方法.. !!

2 个答案:

答案 0 :(得分:1)

使用旧的api,搜索已经返回匹配记录的id列表,因此无需再次调用browse,您可以直接在域过滤器中使用返回的列表

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中,强烈建议你必须多做一步并自己提取id,因为搜索现在会返回一个记录集

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

p_id = [p.id for p in p_id]

答案 1 :(得分:-1)

注1:在ODOO-8和ODOO-9中使用旧API

第一阶段:

要获取我们使用.ids的所有many2many id列表,它将返回列表。

第二阶段:

情况:我们有两个列表,您希望从第二个列表中获取项目,如果它们位于第一个列表中。

>>> 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开发者。