Good day everyone,
I am working on a report for Odoo v12.
I have a related many2many field on my model, which collects information from res.users.
When I browse and print records from this field, i get results like:
[[res.users(2,)]]
[[res.users(39,)]]
[[res.users(2,37,)]]
[[res.users(37,39)]]
[[res.users(37,7,2)]]
[[res.users(39,7)]]
From the list above, I can see that I have several duplicated values which is expactable and are correct.
Everytime I try to use the append() method on the loop, all new records are replacing the old ones, but I am sure I am not using it correctly.
My problems:
1. I need to browse through the records and collect all values, creating a new list and remove all duplicates.
2. After that, I will need to browse through the list and compare with the record on the relational field (for instance [[res.users(37,39)]]) and check if any of the list values exists on the relational field.
Doing that, I will be able to process my report, since it is sorted by users on "res.users".
How can I achieve that?
Thank you all once again in advance
Best regards
Paulo
Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:
- CRM
- e-Commerce
- Contabilidad
- Inventario
- PoS
- Project
- MRP
Se marcó esta pregunta
Odoo let you work directly with recordsets (extend, union, intersect, difference), so my suggestion is to avoid browsing over your many2many lists. Let me make a few assumptions to make clear examples:
You have 'records' over you iterate
Each record has 'user_ids' field (res.users, many2many)
You want to compare aggregation of those users to another field (let assume 'mymodel.user_ids', also res.users, many2many).
Then, to aggregate all users over all records into a single recordset you need just:
final_user_ids = records.mapped("user_ids")
It will return res.users(2,7,37,39,) - so, a recordset without duplicates.
Then, you can simply compare this set to your custom field set as:
intersected_user_ids = final_user_ids & mymodel.user_ids
It will return all the elements which are in both recordsets. To check whether it is empty:
if intersected_user_ids:
print ("The same users", intersected_user_ids)
# >> res.users(2,7)
So, the goal is achieved in 4 lines.
Dear @Odoo Tools,
Thank you very much for your help.
Using your approach I have successfully reached my initial goal.
With it, I have browsed to all records and finished my report for all users.
Now for the part: intersected_user_ids = final_user_ids & mymodel.user_ids
I am not comparing to a model recordset.
I am trying to compare with a variable and try to see if "variable_value is in final_user_ids" but I am unable to do it.
So, until now I have (based on you example):
my_recordset : which contains all records to be filtered and shown on report, based on final_user_ids
final_user_ids : which lists all desired users from my recordset with no duplicates;
report data : I have successfully browsed from all desired records on my_recordset and collect data for every record on final_user_ids.
At this stage I am able to print the report for all users, but I am unable to filter the records on final_user_ids based on a variable in order to collect the data just for that particular user.
PS: I will mark your answer as correct because it is correct and working as expected.
Thank you once again
Best regards
Paulo
In order to check whether a specific user is inside a recordset you can check "if user_id in final_user_ids". If user_id is an ID - integer (not record) then "if user_id in final_user_ids.ids". If you rely upon a current user (who prints): "if self.env.user in final_user_ids"
@Odoo Tools,
Thank you very much once again.
The problem was on "if user_id in final_user_ids.ids". I was using "final_user_ids.ID" instead of "final_user_ids.IDS"
Best regards
Paulo
¿Le interesa esta conversación? ¡Participe en ella!
Cree una cuenta para poder utilizar funciones exclusivas e interactuar con la comunidad.
InscribirsePublicaciones relacionadas | Respuestas | Vistas | Actividad | |
---|---|---|---|---|
|
2
jul 19
|
11133 | ||
|
1
ago 24
|
7691 | ||
|
1
feb 25
|
20746 | ||
|
0
jul 25
|
596 | ||
Filters in multiple companies
Resuelto
|
|
1
may 25
|
1373 |