2

我有以下模型和实例:

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 字符?

这是一个相关的问题,但针对 Apple 的核心数据。

4

2 回答 2

1

这个问题的第一个答案显示了如何使用strip_accents作为 python 函数的函数来实现你想要的。从技术上讲,它不是 Django 的一部分,但它内置于 Python 中。

于 2010-03-19T20:14:00.280 回答
1

如果初始搜索失败,请尝试搜索“去重音”的名称列表。这是一个可以轻松翻译成 python 的 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 中模糊字符串匹配的 stackoverflow 条目:#682367

于 2010-03-19T20:14:39.260 回答