Спасибо всем за ответы!Я смог решить свою проблему, построив ответ @ Брэда.
Я использовал его подход к определению пользовательского поиска.Это похоже на его, но я настроил его для MySQL.
class LowerContainedBy(Lookup):
lookup_name = 'icontained_by'
def as_mysql(self, compiler, connection):
lhs, lhs_params = self.process_lhs(compiler, connection)
rhs, rhs_params = self.process_rhs(compiler, connection)
params = lhs_params + rhs_params
return "LOWER({0}) LIKE LOWER(CONCAT('%%',{1},'%%'))".format(lhs, rhs), params
Field.register_lookup(LowerContainedBy)
(я также заметил, что в его ответе были перевернуты rhs и lhs, так что имейте это в виду!)
Инаконец, путем реализации нового поиска следующим образом:
searchResults = Customer.objects.filter(firstName__icontained_by=search_string).exclude(contract='').order_by('-dateCreated')