Skip to Content
Menu
Musisz się zarejestrować, aby móc wchodzić w interakcje z tą społecznością.
To pytanie dostało ostrzeżenie
2 Odpowiedzi
8257 Widoki

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

Awatar
Odrzuć
Najlepsza odpowiedź

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.

Awatar
Odrzuć
Najlepsza odpowiedź

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']
Awatar
Odrzuć
Powiązane posty Odpowiedzi Widoki Czynność
0
lut 24
1588
0
maj 17
3398
1
sie 25
117
0
lip 25
937
0
cze 25
288