Django的使用ASCII当量Unicode字符串的近似匹配
-
21-09-2019 - |
题
我有以下模型和实例:
class Bashable(models.Model):
name = models.CharField(max_length=100)
>>> foo = Bashable.objects.create(name=u"piñata")
现在我希望能够搜索对象,但使用的ASCII字符,而不是unicode的,是这样的:
>>> Bashable.objects.filter(name__lookslike="pinata")
是否有在Django办法做到这种近似串匹配的,用ASCII替身在数据库中的Unicode字符?
下面是一个相关问题,但苹果的核心数据。
解决方案
尝试对名称的“去重音”列表中,如果初始搜索失败搜索。下面是一个PHP remove_accents功能可以很容易地转换成蟒蛇:的 remove_accents()
query = u"pinata"
r = Bashable.objects.filter(name=query)
if not r:
accented = Bashable.objects.values('id', 'name')
match_ids = [ obj['id'] for obj in accented
if query in remove_accents(obj['name']) ]
r = Blog.objects.in_bulk(match_ids)
return r
这是在python模糊字符串匹配一个计算器项:#682367
不隶属于 StackOverflow