[Django] Django ORM과 QuerySets

1 분 소요

웹 프레임워크 Django(장고) 공부
개발 언어 : python 3.8.1
개발 환경 : Visual studio Code
참조 : 장고걸스 튜토리얼

직접 블로그를 만들기위해 Django 를 공부해보자.

쿼리셋(QuerySet)이란?

전달받은 모델의 객체 목록.

쿼리셋은 데이터베이스로부터 데이터를 읽고, 필터를 걸거나 정렬을 할 수 있다.

장고 쉘(shell)

로컬 콘솔에서 다음을 입력한다.

python manage.py shell  

실행하면 파이썬 프롬포트 와 비슷한 화면이 나온다.

Post모델을 blog.models에서 불러온다.

>>> from blog.models import Post

그러면 아래와 같이 현재 게시된 글 목록을 볼 수 있다.

Post.objects.all()
<QuerySet [<Post: My first Post!>]>  

객체 생성하기

데이터베이스에 새 글 객체를 저장하는 방법

  • User는 슈퍼유저로 등록했던 사용자이다.
  • User의 인스턴스를 me로 받아와 사용자 이름을 me로 바꿔준다.
  • 새로운 게시물을 생성한다.
>>> from django.contrib.auth.models import User  
>>> User.objects.all() # User의 모든 오브젝트를 확인하는 방법  
>>> me = User.objects.get(username = 'wonillism')  # 사용자 이름 me로 변경
>>> Post.objects.create(author=me, title = 'Simple title', text = 'Test')  # 새 게시물 생성  
>>> Post.objects.all() # 게시물 확인  
<QuerySet [<Post: My first Post!>, <Post: Simple title>]> # 새 게시물이 생성된 것을 확인 할 수 있다.

필터링 하기

쿼리셋의 중요한 기능 중 하나인 필터링, 예를 들어 me이라는 사용자가 작성한 모든 글을 찾고 싶을 때 필터링 할 수 있다.

>>> Post.objects.filter(author=me)  
<QuerySet [<Post: My first Post!>, <Post: Simple title>, <Post: Hello!!>]>

제목 필터링

>>> Post.objects.filter(title__contains = 'title')  

시간 필터링

published_date 게시일 기준으로 목록을 불러올 수 있음
하지만 파이썬 콘솔에서 추가한 게시물은 아직 보이지 않음.

>>> from django.utils import timezone  
>>> Post.objects.filter(published_date__lte=timezone.now())    

게시물 게시

>>> post = Post.objects.get(title="Simple title")  
>>> post.publish()  
>>> Post.objects.filter(published_date__lte=timezone.now())  

정렬하기

>>> post = Post.objects.order_by('create_date') # 날짜별 오름차순 정렬  
>>> post = Post.objects.order_by('-create_date') # 날짜별 내림차순 정렬  

쿼리셋 연결하기

>>> Post.objects.filter(published_dtate__lte=timezone.now()).order_by('published_date')  

댓글남기기