콘텐츠로 건너뛰기
메뉴
커뮤니티에 참여하려면 회원 가입을 하시기 바랍니다.
신고된 질문입니다
2 답글
4433 화면

I tried to get the records count from ir.attachment using two methods:


1. Executed SQL code with self._cr.execute:

query="""select count(*) from ir_attachment"""        

cr=self._cr        

cr.execute(query)        

val=cr.dictfetchall()        

for r in val:            

    print ("SQL returns....",r)


Code returned 364 rows


2. Using the self.env.search_count:

val=self.env['ir.attachment'].sudo().search_count([])        

print ("search_count returns....",val)


In this case the result is 259 rows


Why the difference in the results? Why search_count doesn't return all records?


아바타
취소
베스트 답변

Hi!

The model ir.attachment is quite specific in Odoo. In particular, it redefines the _search method and excludes by default attachments related to fields (with res_field set). Thus, the results might differ even under sudo(). If it is important for you, you should get deep in https://github.com/odoo/odoo/blob/15.0/odoo/addons/base/models/ir_attachment.py

Generally, the _search, search, search_count method might give different results than a direct SQL query, since they are redefined per a specific model. For example, by default Odoo search only active records for all models (so, you should apply with_context(active_test=False) to show also records with active=false). It does not relate to attachments specifically, but it is a very good example of different results.

아바타
취소
작성자 베스트 답변

Thanks for the answer! 

It helped me to solve the problem by searching for true and false res_id fields, using the following domain:

['|', ('res_field', '!=', False), ('res_field', '=',False)]



아바타
취소
관련 게시물 답글 화면 활동
1
4월 15
21985
0
3월 25
398
1
4월 24
1219
4
4월 24
172639
0
12월 23
1404