본문 바로가기
파이썬/파이썬기본문법

파이썬 Django QuerySet - order_by()

by flycoding 2024. 3. 13.
반응형

파이썬 Django QuerySet - order_by()

QuerySets를 정렬하려면 Django에서 order_by() 메서드를 사용한다:

 

결과를 이름의 알파벳 순으로 정렬한다:

template.html

<!DOCTYPE html>
<html>
<body>

<p>The queryset object:</p>

{{ mymembers }}

<p>Loop through the items:</p>

<table border='1'>
  <tr>
    <th>ID</th>
    <th>Firstname</th>
    <th>Lastname</th>
  </tr>
  {% for x in mymembers %}
    <tr>
      <td>{{ x.id }}</td>
      <td>{{ x.firstname }}</td>
      <td>{{ x.lastname }}</td>
    </tr>
  {% endfor %}
</table>

</body>
</html>
views.py

from django.http import HttpResponse
from django.template import loader
from .models import Member

def testing(request):
  mydata = Member.objects.all().order_by('firstname').values()
  template = loader.get_template('template.html')
  context = {
    'mymembers': mydata,
  }
  return HttpResponse(template.render(context, request))

# Check out template.html to see how the mymembers object
# was used in the HTML code.

위의 코드를 실행하면 아래 그림과 같다.

파이썬 Django QuerySet order_by() 정렬 활용 예제

 

SQL에서 위의 문장은 다음과 같이 적는다:

SELECT * FROM members ORDER BY firstname;    

 

파이썬 Django QuerySet - order_by() 내림차순

기본적으로 결과는 오름차순(가장 낮은 값이 먼저)으로 정렬되며, 내림차순으로 방향을 변경하려면(가장 높은 값이 먼저), 빼기 기호(NOT)를 사용합니다(필드 이름 앞에 있음):

 

결과 이름 내림차순:

template.html

<!DOCTYPE html>
<html>
<body>

<p>The queryset object:</p>

{{ mymembers }}

<p>Loop through the items:</p>

<table border='1'>
  <tr>
    <th>ID</th>
    <th>Firstname</th>
    <th>Lastname</th>
  </tr>
  {% for x in mymembers %}
    <tr>
      <td>{{ x.id }}</td>
      <td>{{ x.firstname }}</td>
      <td>{{ x.lastname }}</td>
    </tr>
  {% endfor %}
</table>

</body>
</html>
views.py

from django.http import HttpResponse
from django.template import loader
from .models import Member

def testing(request):
  mydata = Member.objects.all().order_by('-firstname').values()
  template = loader.get_template('template.html')
  context = {
    'mymembers': mydata,
  }
  return HttpResponse(template.render(context, request))
          


# Check out template.html to see how th

위의 코드를 실행하면 아래 그림과 같다.

파이썬 django queryset order_by() 내림차순 활용 예제

 

SQL에서 위의 문장은 다음과 같이 적는다:

SELECT * FROM members ORDER BY firstname DESC;

 

파이썬 Django QuerySet - order_by() 다중정렬

두 개 이상의 필드를 정렬하려면 order_by() 메서드에서 필드 이름을 쉼표로 구분한다:

 

결과를 먼저 성을 오름차순으로 정렬한 다음 id를 내림차순으로 정렬한다:

template.html

<!DOCTYPE html>
<html>
<body>

<p>The queryset object:</p>

{{ mymembers }}

<p>Loop through the items:</p>

<table border='1'>
  <tr>
    <th>ID</th>
    <th>Firstname</th>
    <th>Lastname</th>
  </tr>
  {% for x in mymembers %}
    <tr>
      <td>{{ x.id }}</td>
      <td>{{ x.firstname }}</td>
      <td>{{ x.lastname }}</td>
    </tr>
  {% endfor %}
</table>

</body>
</html> 
views.py

from django.http import HttpResponse
from django.template import loader
from .models import Member

def testing(request):
  mydata = Member.objects.all().order_by('lastname', '-id').values()
  template = loader.get_template('template.html')
  context = {
    'mymembers': mydata,
  }
  return HttpResponse(template.render(context, request))
            


# Check out template.html to see how the mymembers object
# was used in the HTML code. 

위의 코드를 실행하면 아래 그림과 같다.

파이썬 django queryset order_by() 다중 정렬 활용 예제

 

SQL에서 위의 문장은 다음과 같이 적는다:

SELECT * FROM members ORDER BY lastname ASC, id DESC;

 

이번 글에서는 파이썬 Django QuerySet order_by() 메소드를 활용하여 정렬에 대해서 살펴보았다.

order_by() 메소드는 오름차순 정렬, 내림차순 정렬에 대해서 살펴보았다. 여러 필드에 정렬하는 방법을 지정할 수 있는 다중 정렬에 대해서 실습해보았다.

 

꼭 손으로 눈으로 머리로 익히며 실습하기를 바란다.
모두 화이팅입니다.!!!

출처 : 이 글의 출처는 w3schools사이트를 참고하였으며 필자가 추가하여 정리한 글입니다.

반응형

댓글