0

我在模型“news.ads”和“blog.post”中都有一个 many2many 字段“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 中搜索此类记录?任何解决方法..!!

4

2 回答 2

1

使用旧的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]
于 2016-08-11T08:18:06.960 回答
-1

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

于 2016-08-11T07:09:17.640 回答