This question has been flagged
1 Reply
5931 Views

Hi,


I have a many2many field "tag_ids" both in models "news.ads" and "blog.post".

I want to get all the records from "blog.post" whose "tag_ids" exactly matches the "tag_ids" in "news.ads".

I tried the following in my controller but it doesn't worked,

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)

How do I search such records in odoo9? Any workaround..!!

Avatar
Discard
Best Answer

sebin,

what you can do is,

First get the records of both the object as:

news_ads_tags = self.env['news.ads'].browse(news_ads_id).tag_ids

blog_post_tags = self.env['blog.post'].browse(blog_post_id).tag_ids

now to get the ids which are in both of them:
res = [rec.id for rec in new_ads_tags if rec in blog_post_tags]

res will contains  all those tags which are in new_ads_tags and blog_post_tags both!!

Hope it helps!!



Avatar
Discard
Author

Hi Pawan,

Thanks for your answer. Actually I need to use it in a domain for a search operation. I updated my question above. How can I use it in the search operation.

Sebin,

first p_id is the list returned from search, so either you loop through it or for first element use p_id[0], then you can get the first records object form list using:

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

then in banner_ads you can try this:

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