我在模型“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中搜索此类记录?任何解决方法.. !!
答案 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开发者。