[Django] Django ORM과 QuerySets
웹 프레임워크 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')
댓글남기기