如何在Django中创建QuerySet以查看数据库中的名称是否为查询字符串的子字符串? [英] How do I make a QuerySet in Django to see if a name in the database is a substring of my query string?

查看:11
本文介绍了如何在Django中创建QuerySet以查看数据库中的名称是否为查询字符串的子字符串?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

正如标题所提到的,我正在Django中工作,并尝试创建一个QuerySet来返回其Name值是QUERY_STRING的子字符串的所有"Customer"模型。

我想要这样的东西:

Customer.objects.filter(firstName__icontains=query_string)

但反之亦然:

Customer.objects.filter(query_string__icontains=firstName)

除非这显然不起作用。

我正在努力寻找有关我将如何处理此问题的任何信息。

提前感谢。

编辑 我的预期输入将是日文-假名和汉字かな、カナ、漢字

推荐答案

感谢大家的回答! 我可以根据@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')

这篇关于如何在Django中创建QuerySet以查看数据库中的名称是否为查询字符串的子字符串?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆