Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
1 Trả lời
7197 Lượt xem

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..!!

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

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!!



Ảnh đại diện
Huỷ bỏ
Tác giả

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])],

Bài viết liên quan Trả lời Lượt xem Hoạt động
0
thg 3 17
8831
0
thg 10 23
2970
4
thg 12 21
32977
2
thg 12 20
9030
1
thg 12 18
2621