Аппроксимация Django сопоставления строк Юникода с эквивалентами ASCII
У меня есть следующая модель и экземпляр:
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 ответа
Попробуйте выполнить поиск по "деакцентированному" списку имен, если начальный поиск не удался. Вот 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
А вот запись stackru о нечетком сопоставлении строк в python: # 682367
Первый ответ на этот вопрос показывает, как использовать strip_accents
функция, которая является функцией Python для достижения того, что вы хотите. Технически это не часть Django, но он встроен в Python.