Django

Django queryset distinct and sort

친구들안녕 2021. 8. 2. 09:35

서론

기본적으로 Django의 정렬은 order_by로 시작하면 된다. 참조

그러나 필자의 상황은 이름 중복을 제거하면서 날짜 정렬를 해야하는 상황이었다.

 

그러나 django docs를 보면 distinct를 사용하려면 order_by가 같이 들어가는 상황이었다.

>>> Entry.objects.order_by('author', 'pub_date').distinct('author')

이렇게 사용하면 author, pub_date순서로 정렬되므로 날짜순서로 order_by가 불가능해진다.

그래서 중복 제거 후 따로 정렬하는 방법을 찾았다.

 

본론

중복제거를 한 후 python operator 라이브러리로 created_at을 얻어 정렬해주는 방법을 찾았다.

 

queryset = CrwalingModel.objects.order_by('enter_name').distinct('enter_name')
queryset = sorted(queryset, key=operator.attrgetter('created_at'), reverse=True)

 

Reference

https://stackoverflow.com/questions/2412770/good-ways-to-sort-a-queryset-django

 

Good ways to sort a queryset? - Django

what I'm trying to do is this: get the 30 Authors with highest score ( Author.objects.order_by('-score')[:30] ) order the authors by last_name Any suggestions?

stackoverflow.com