QuerySets (쿼리셋)

  • 쿼리셋 : 모델객체 목록
  • 쿼리셋으로 데이터베이스로부터 데이터베이스를 읽고, 필터링하거나, 정렬할 수 있음

 

  • 쿼리셋 사용법: 쿼리셋으로 데이터베이스의 정보를 읽어오기
    • 앱(blog)의 모델(Post)을 불러와서(=쿼리셋), 데이터베이스의 모든 글(object, 객체)을 읽어옴 
#command-line

>>> from blog.models import Post
>>> Post.objects.all()
<QuerySet [<Post: my post title>, <Post: another post title>]>

 

  • 쿼리셋 사용법: 쿼리셋으로 데이터베이스에 정보 저장하기
    • 앱(blog)의 모델(Post)을 불러와서(=쿼리셋), 데이터베이스에 새 글(object, 객체)을 저장함(create)

 

#command-line

>>> Post.objects.create(author=me, title='Sample title', text='Test')
  • 참고로, 사용자(User) 모델의 인스턴스를 전달해야함.
#command-line

>>> from django.contrib.auth.models import User
>>> User.objects.all()
<QuerySet [<User: ola>]>
>>> me = User.objects.get(username='ola')

>>> Post.objects.create(author=me, title='Sample title', text='Test')
>>> Post.objects.all()
<QuerySet [<Post: my post title>, <Post: another post title>, <Post: Sample title>]>

 

  • 쿼리셋 사용법: 쿼리셋으로 데이터베이스 필터링하기
    • 모든 객체.filter(조건)
    • title__contains  : 밑줄 2개, 필드이름(title) 및 연산자(contains)
#command-line

>>> Post.objects.filter(author=me)
[<Post: Sample title>, <Post: Post number 2>, <Post: My 3rd post!>, <Post: 4th title of post>]

>>> Post.objects.filter(title__contains='title')
[<Post: Sample title>, <Post: 4th title of post>]

 

  • 쿼리셋 사용법: 쿼리셋으로 저장한 글(object)를 얻어서(get) 게시(publish)하기
#command-line

#Sample title라는 제목의 글(objet)를 얻어오기
>>> post = Post.objects.get(title="Sample title")

#게시글을 publish method로 publish하기
>>> post.publish()

#게시일로 과거에 작성한 글을 필터링하기
>>> Post.objects.filter(published_date__lte=timezone.now())
[<Post: Sample title>]

 

  • 쿼리셋 사용법: 쿼리셋으로 글(객체) 목록을 정렬하기 
    • created_date 필드를 정렬하기
    • 기본으로 오름차순, - 을 붙이면 내림차순
#command-line

#오름차순: 생성일 기준
>>> Post.objects.order_by('created_date')
[<Post: Sample title>, <Post: Post number 2>, <Post: My 3rd post!>, <Post: 4th title of post>]

#내림차순: 생성일 기준
>>> Post.objects.order_by('-created_date')
[<Post: 4th title of post>,  <Post: My 3rd post!>, <Post: Post number 2>, <Post: Sample title>]

 

  • 쿼리셋 사용법: 쿼리셋들을 chaining하여 복잡한 필터링
    • 모든객체.filter(조건).order_dy('필드 이름')
#command-line

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

 

 

쿼리셋: https://docs.djangoproject.com/en/2.0/ref/models/querysets/

+ Recent posts