感谢大家的回答!我能够通过构建@brad 的答案来解决我的问题。
我采用了他定义自定义查找的方法。它看起来很像他的,但我为 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')