Summary
All toolbar text search filters across the platform UI use Django's __contains lookup, which produces a case-sensitive LIKE on PostgreSQL. Users expect search to be case-insensitive (and it was in AAP 2.4).
For example, on the Users page, searching for the email david.levene@example.com returns no results if the stored value is David.LeVene@example.com.
Affected areas
- Platform: users list, organisation users list, authenticator mappings
- AWX: roles list, resource selection in role wizard
- EDA: roles list
- Hub: users list, roles list, tasks list, resource selection in role wizard
- Common: access/role assignment lists (role name filter)
Root cause
Toolbar filter hooks set query: 'field__contains' instead of query: 'field__icontains'. On PostgreSQL, __contains maps to LIKE (case-sensitive) while __icontains maps to ILIKE (case-insensitive).
Related
- Jira: AAP-42092
- Reproduced on AAP 2.6 (gateway API confirms
__contains is case-sensitive, __icontains works correctly)
Summary
All toolbar text search filters across the platform UI use Django's
__containslookup, which produces a case-sensitiveLIKEon PostgreSQL. Users expect search to be case-insensitive (and it was in AAP 2.4).For example, on the Users page, searching for the email
david.levene@example.comreturns no results if the stored value isDavid.LeVene@example.com.Affected areas
Root cause
Toolbar filter hooks set
query: 'field__contains'instead ofquery: 'field__icontains'. On PostgreSQL,__containsmaps toLIKE(case-sensitive) while__icontainsmaps toILIKE(case-insensitive).Related
__containsis case-sensitive,__icontainsworks correctly)