Skip to Content
Menu
This question has been flagged
2 Replies
7086 Views

Hi All

I am attempting to create filters to segment my database. For me it makes sense to use the first letter of Name. i.e. Contacts starting with A, B, C, etc, along with a tag. It seems thought that I get records in multiple filters because it returns contacts that FIRST OR LAST name begin with that letter of the Alphabet. E.g. Doctor Hoffman Will appear in both the D filter and the W filter where I only want him to appear once. I am using this filter for instance:

[['category_id', '=', 'UK Import'], ['name', '=like', 'C']] 


What am I doing wrong? Why is it looking in both the First and Last name and not just the first letter of the name field?


Hope someone can help


Thanks

Avatar
Discard
Best Answer

Hello Dale,

I'm afraid this can't be achieved, all string LIKE/NOT LIKE comparison operators end up matching substrings, either case sensitive or insentitive, please see here:

https://github.com/odoo/odoo/blob/8.0/openerp/osv/expression.py#L1219

Notice how the right leaf (the query parameter) is automatically wrapped in '%' wildcards lines below to end as '%%%s%%' (which evaluates to '%my_search_criteria%').

* https://github.com/odoo/odoo/blob/8.0/openerp/osv/expression.py#L1242

Filters use search by default, which in turn end using domain expressions and hence the above limitation.

Using the exact match operator '=' prevents wrapping the search criteria in wildcards but then any wildcards explicitly provided in the search criteria (like in 'my_search_criteria%') are not taken into account.

Regards.

Avatar
Discard
Best Answer

You should be able to use the filter with a wildcard like the following for starts with / ends with:


# Starts With C
['name', '=like', 'C%']

# Ends With C
['name', '=like', '%C']
Avatar
Discard
Related Posts Replies Views Activity
0
Feb 24
647
0
May 17
2601
2
Nov 24
1854
2
Oct 24
342
2
Aug 24
361