쿼리셋이란?
objects list 즉, 전달받은 모델의 객체 목록이다. 쿼리셋은 데이터베이스로부터 데이터를 읽고, 필터를 적용 하거나 정렬할 수 있다.
이전 포스팅을 참고하여 쿼리셋을 예제로 사용해보려 한다.
2020/11/06 - [Python/Django] - [Django] ORM #1
2020/11/09 - [Python/Django] - [Django] ORM #2
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호>]>
이건 매우 멋진 기능이다! 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 |
댓글