2010-03-19 6 views
2

I가 다음과 같은 모델 예 :장고 대략 일치 등가물

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") 

데이터베이스에서 유니 코드 문자를 아스키 스탠드 기능을 사용하여 대략적인 문자열 일치 이런 종류의 작업을 수행하는 장고 방법이 있나요?

여기는 related question이지만 Apple의 핵심 데이터입니다.

답변

1

초기 검색이 실패 할 경우 "de-accented"이름 목록을 검색해보십시오. 파이썬에서 퍼지 문자열 일치에 유래 항목 여기 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 

을 그리고 : #682367

+0

이 합리적인 해결책처럼 보이는 여기에 쉽게 파이썬로 번역 될 수있는 PHP를 remove_accents 기능입니다. 단일 쿼리에서 데이터베이스 수준에서이 작업을보다 효율적으로 수행 할 수 있으면 좋겠지 만 PostgreSQL이 최소한 지원하지는 않습니다 (다른 항목은 확인하지 않은 것 같습니다). Pace의 솔루션 [1]은 악센트 스트리핑의 구현을 가리 킵니다. [1] http://stackoverflow.com/questions/2480159/django-approximate-matching-of-unicode-strings-with-ascii-equivalents/2480313#2480313 – user85461

1

this question의 첫 번째 대답은 원하는 것을 얻기 위해 파이썬 함수 인 strip_accents 함수를 사용하는 방법을 보여줍니다. 기술적으로 Django의 일부는 아니지만 Python에 내장되어 있습니다.