如何检查oo9中的两个many2many字段是否完全相等



在models "news中我有一个many2many字段"tag_ids"。广告"one_answers"blog.post".

我想从"blog"得到所有的记录。"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中搜索这些记录?任何解决方案. . ! !

使用旧的api, search已经返回匹配记录的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:不要在ODOO-8和ODOO-9中使用旧API

第一阶段:

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

第二阶段:

情况:我们有两个列表,如果它们在第一个列表中,你想从第二个列表中获取它们。

>>> 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开发人员。

相关内容

最新更新