괴발개발/Django

django order_by 한글 정렬하기 (글자수 무시하고 가나다 순으로만)

이태원프리덤# 2022. 9. 27. 14:31
728x90

기본적으로 django에서 쿼리셋 정렬할 때 아래와 같이 order by 사용하면 서 field 명을 적어주면 된다

Test.objects.order_by('name')

'abcd' -> 'bc' -> 'ccccccc'

하지만 한글 이름은 아래와 같이 가나다 순으로 정렬은 되지만 글자수를 우선으로 적용된다

'최영' -> '김아무개' -> '이무개'

 

데이터베이스 sql문으로는 collate "ko_KR.utf8" 를 붙여주면 되므로 django에서도 직접 함수를 만들어 정렬 해줘야 한다

my_order_func = Func(
    'name',
    function='ko_KR.utf8',
    template='(%(expressions)s) COLLATE "%(function)s"')
    
Test.objects.order_by(my_order_func.asc())

 

출력하면 이 글에서 원하는 방식으로 정렬된다 ^^

'김아무개' -> '이아무개' -> '최영'

 

익숙함에 잘사용하지 않았던 django.db.models 모듈에 Avg, Func등 자주 사용하도록 해야겠다

728x90