Skip to Content
Meniu
Trebuie să fiți înregistrat pentru a interacționa cu comunitatea.
Această întrebare a fost marcată
2 Răspunsuri
4451 Vizualizări

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?


Imagine profil
Abandonează
Cel mai bun răspuns

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.

Imagine profil
Abandonează
Autor Cel mai bun răspuns

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



Imagine profil
Abandonează
Related Posts Răspunsuri Vizualizări Activitate
1
apr. 15
21986
0
mar. 25
411
1
apr. 24
1224
4
apr. 24
172670
0
dec. 23
1414