Django приблизительное сопоставление строк unicode с эквивалентами ascii

StackOverflow https://stackoverflow.com/questions/2480159

Вопрос

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

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.

Это было полезно?

Решение

Попробуйте выполнить поиск по списку имен с "деакцентом", если первоначальный поиск не удался.Вот функция php remove_accents, которая может быть легко переведена на python: удалить_акценты()

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

И вот запись stackoverflow о нечетком сопоставлении строк в python: #682367

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top