We have an instance of V9 odoo running. Anywhere that a domain filter is used with an evaluated value, an error is thrown.
As an example, on the res.users searchview I have created a simple domain filter:
[('id', '=', user.id)]
When applying this filter the following error is thrown:
Error: Failed to evaluate search criterions: {"code":400,"message":"Evaluation Error","data":{"type":"local_exception","debug":"Local evaluation failure\nNameError: name 'user' is not defined\n\n{\"domains\":[[],\"['id', '=', user.id]\"],\"contexts\":[{\"lang\":\"en_GB\",\"tz\":\"Asia/Saigon\",\"uid\":566,\"params\":{\"action\":69,\"page\":0,\"limit\":80,\"view_type\":\"list\",\"model\":\"res.users\",\"menu_id\":79,\"_push_me\":false},\"search_default_no_share\":1},{},\"{}\"],\"group_by_seq\":[\"{}\"]}"}}
This occurs no matter what odoo system values are used. For example:
- user.partner_id
- user.name
- user.id
The only one that does not through an error is uid, i.e.
[('id', '=', uid)]
The purpose of accessing user is to access further values related to the current user. The entire code for the domain filter I am trying to create is the following:
<record id="crm_opportunity_search_view" model="ir.ui.view">
<field name="name">crm.opportunity.search.view</field>
<field name="model">crm.opportunity</field>
<field name="arch" type="xml">
<search string="Opportunities">
<field name="name" filter_domain="[('name','ilike',self)]"/>
<filter string="My Division" name="my_division" domain="[('owner_id.business_unit_id.id', '=', user.partner_id.business_unit_id.id)]"/>
</search>
</field>
</record>
"My division" is an available filter in the filters menu from opportunities. However, when selected throws an error that "user" is not defined.
I have tried adding the domain filter in XML and using the advanced filters in the technical settings to no avail.
I have tried this in two separate v9 instances with the same result.
Trying to add any domain filter in a new instance of v11 such as below, using user.id or uid returns a "domain filter not properly formed" error.
[["name","=",user.id]]
Any clues on what I am doing wrong would be welcomed.
The problem is that
user
is a variable which unfortunately is only available when writing records from specific models, like for exampleir.rule
(here you can useuser
in thedomain_force
field).So that variable doesn't exist in a search view, that's why you get the error.
Take a look at the Rules official documentation: https://www.odoo.com/documentation/8.0/reference/security.html
So the solution you're looking for is this one:
Create a new computed field named
my_division
incrm.opportunity
model:Add this field (invisible) to the views (tree, kanban, etc) you can search for. Then modify your search filter this way:
That should work. Let me know.
EDIT
Sometimes, when you create a computed field which is stored in the database, it doesn't behave as expected (it stops recalculating itself). When I'm fed up with struggling with that, I do the following trick (I don't like it at all but... I need to carry on).
You can preserve the filter I wrote you above, but you have to modify a couple of things in the
crm.opportunity
model:First, make
my_division
a non-computed field. Then, modifycrm.opportunity
create
andwrite
ORM methods (be careful with thesuper
-don't write exactlyCrmOpportunity
, write the name you chose for the Python class-):This must work for sure, but it's not very clean.