Аппроксимация Django сопоставления строк Юникода с эквивалентами ASCII - PullRequest
2 голосов
/ 19 марта 2010

У меня есть следующая модель и экземпляр:

class Bashable(models.Model):
    name = models.CharField(max_length=100)

>>> foo = Bashable.objects.create(name=u"piñata")

Теперь я хочу иметь возможность искать объекты, но используя символы ascii, а не юникод, что-то вроде этого:

>>> Bashable.objects.filter(name__lookslike="pinata")

Есть ли в Django способ приблизительного сопоставления строк, использующий замену ascii для символов юникода в базе данных?

Вот связанный вопрос , но для основных данных Apple.

Ответы [ 2 ]

1 голос
/ 19 марта 2010

Попробуйте выполнить поиск по «деактивированному» списку имен, если начальный поиск не удался. Вот функция php remove_accents, которую можно легко перевести на python: 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

1 голос
/ 19 марта 2010

Первый ответ на на этот вопрос показывает, как использовать функцию strip_accents, которая является функцией python, для достижения того, что вы хотите. Технически это не часть Django, но он встроен в Python.

...