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/
'개발 > 파이썬' 카테고리의 다른 글
djangogirls | 8. form (폼) (0) | 2020.10.31 |
---|---|
djangogirls | 7. 애플리케이션 확장 (0) | 2020.10.31 |
djangogirls | 5.urls, view, 템플릿(html) (0) | 2020.10.29 |
djangogirls | 4. 모델, 모델을 위한 테이블, admin (0) | 2020.10.29 |
djangogirls | 3. 블로그 만들기_프로젝트, 데이터베이스, 앱 (0) | 2020.10.28 |