본문 바로가기
Web developer/Django

[Django] 쿼리셋(Query sets)

by doongjun 2020. 11. 9.

쿼리셋이란?

objects list 즉, 전달받은 모델의 객체 목록이다. 쿼리셋은 데이터베이스로부터 데이터를 읽고, 필터를 적용 하거나 정렬할 수 있다.

 

이전 포스팅을 참고하여 쿼리셋을 예제로 사용해보려 한다.

2020/11/06 - [Python/Django] - [Django] ORM #1

 

[Django] ORM #1

노마드코더의 강의를 듣고 중요한 내용을 정리하였습니다. ORM ORM은 각 언어별로 있는 기능이다. 원래 데이터베이스 서버의 어떤 데이터를 검색, 추가, 수정, 삭제 등을 할때 SQL을 사용해야 한다.

doongjun.tistory.com

2020/11/09 - [Python/Django] - [Django] ORM #2

 

[Django] ORM #2

이번 포스팅에서는 장고에서 ORM 관계 대해 다룰 것이다. 이전 ORM #1 포스팅 참고 2020/11/06 - [Python/Django] - [Django] ORM #1 [Django] ORM #1 노마드코더의 강의를 듣고 중요한 내용을 정리하였습니다. OR..

doongjun.tistory.com

PythonAnywhere가 아닌 python manage.py shell 명령을 입력해 장고 인터렉티브 콘솔(interactive console)에서 쿼리셋을 사용해야한다.

>>> from users.models import User
>>> from rooms.models import Room
>>> from rooms.models import Amenity

먼저 User, Room, Amenity 모델을 users.models와 rooms.models에서 불러와야 한다.

>>> User.objects.all()
<QuerySet [<User: owner>, <User: student>]>
>>> Room.objects.all()
<QuerySet [<Room: 403호>]>
>>> Amenity.objects.all()
<QuerySet [<Amenity: Shower>, <Amenity: Wifi>, <Amenity: Washer>]>

User모델에서 간단하게 아래와 같이 필터링을 사용할 수 있다.

>>> User.objects.filter(username="student") 
<QuerySet [<User: student>]>

<이전 포스팅(ORM #2) 참고>

rooms/models.py에서 설정해줬던 Room과 Amenity관계를 보면 related_name="rooms"와 같이 "room_set"을 "rooms"로 변경해주었다. 이것은 Amenity에서 "rooms"를 사용해 불러올 수 있다. 아래 명령은 Amenity로부터 Shower도구(id=1)가있는 방을 보여주는 것이다.

>>> shower = Amenity.objects.get(id=1)
>>> shower.rooms.all()
<QuerySet [<Room: 403호>]>

403호의 Amenities

이건 매우 멋진 기능이다! Amenity는 방을 갖고있지 않지만 단지 Room이 amenities의 Many to Many field를 갖기 때문에 장고가 room_set을 생성한 것이다.

 

 

'Web developer > Django' 카테고리의 다른 글

[Django] 장고 템플릿 #2  (0) 2020.11.13
[Django] 장고 템플릿 #1  (0) 2020.11.13
[Django] ORM #2  (0) 2020.11.09
[Django] 모델 상속  (0) 2020.11.06
[Django] ORM #1  (0) 2020.11.06

댓글