본문 바로가기

Python/Django

장고 걸즈 튜토리얼 따라하기 8 - 장고 ORM과 쿼리셋

장고 걸즈 튜토리얼 따라하기 8 - 장고 ORM과 쿼리셋

쿼리셋이란?

쿼리셋(QuerySet)은 전달받은 모델의 객체 목록이다. 쿼리셋은 데이터베이스로부터 데이터를 읽고, 필터를 걸거나 정렬 할 수 있다.

 

장고 쉘(shell)

로컬 콘솔에서 아래 명령을 입력한다.

그러면 장고 인터랙티브 콘솔로 들어갈 수 있다.

 

모든 객체 조회하기

모든 글들을 출력하기 위해서 blog.models에서 Post 모델을 import 해온다.

그리고 아래 명령을 입력해 모든 글들을 출력한다.

 

객체 생성하기

이번에는 새 글을 포스팅 해본다.

우선 작성자 정보를 가져오기 위해서 User 모델을 불러온다.

객체를 조회할 때의 명령어를 User에 써서 모든 유저 정보를 알아보면

슈퍼유저 정보로 등록한 사용자가 표시된다. 이제 이 사용자의 인스턴스 정보를 가져온다.

me 변수에 사용자 이름이 'admin'인 User 인스턴스를 받아왔다.

이제 아래 명령을 통해 게시물을 만든다.

제대로 적용했는지 확인해보기 위해서 객체를 조회해보면 목록에 게시글이 하나 늘었다는 것을 볼 수 있다.

 

필터링하기

쿼리셋에서 중요한 기능은 데이터들을 필터링 하는 것이다. 예를 들어, 특정 사용자가 작성한 글 목록을 보고 싶은 경우에는 Post.objects.all()에서 all 대신, filter를 사용한다. 지금 같은 경우에는 작성자가 me인 조건을 넣으면 아래와 같이 된다.

제목에 'title'이라는 글자가 포함된 글들을 보고 싶다면 아래와 같이 하면 된다.

장고의 timezone을 불러와서 과거에 작성한 글들을 필터링 하는 것도 가능하다.

지금 콘솔에서 추가한 게시물은 보이지 않지만 바꿀 수 있다. 먼저 게시하려는 게시물의 인스터스를 받아온다.

그리고 publish 메소드를 사용해서 글을 게시한다.

다시 게시글 목록을 가져오면 Sample title 게시글이 추가된 것을 볼 수 있다.

 

정렬하기

쿼리셋은 객체 목록을 정렬할 수 있다. created_date 필드를 정렬해본다.

 

쿼리셋 연결하기

이 쿼리셋들을 연결(chaining) 할 수 있다.