model을 만들면, Manager도 같이 만들어짐
-> .Objects
Room.objects.get(name="Apt in 서울")
Room이라는 모델의 Manager를 사용하여 name이 "Apt in 서울"인 Room을 꺼냄
-> Manager은 장고 모델에 database query operation으로 제공되는 인터페이스임
python manage.py shell
>>> from rooms.models import Room
>>> Room.objects.all()
<QuerySet [<Room: Beautiful House in 서울>, <Room: Apt in 서울>]>
>>> for room in Room.objects.all():
... print(room.name)
...
Beautiful House in 서울
Apt in 서울
# get
>>> Room.objects.get(pk=1)
<Room: Beautiful House in 서울>
#유일한 값일 경우에만 사용해야함, 2개 나오는 값에 이용하면 에러나옴
>>> Room.objects.get(pet_friendly=True)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/user-name/Library/Caches/pypoetry/virtualenvs/airbnb-clone-backend-XIj4WM__-py3.12/lib/python3.12/site-packages/django/db/models/manager.py", line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/user-name/Library/Caches/pypoetry/virtualenvs/airbnb-clone-backend-XIj4WM__-py3.12/lib/python3.12/site-packages/django/db/models/query.py", line 652, in get
raise self.model.MultipleObjectsReturned(
rooms.models.Room.MultipleObjectsReturned: get() returned more than one Room -- it returned 2!
#값이 없어도 에러남
>>> Room.objects.get(pk=3)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/user-name/Library/Caches/pypoetry/virtualenvs/airbnb-clone-backend-XIj4WM__-py3.12/lib/python3.12/site-packages/django/db/models/manager.py", line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/user-name/Library/Caches/pypoetry/virtualenvs/airbnb-clone-backend-XIj4WM__-py3.12/lib/python3.12/site-packages/django/db/models/query.py", line 649, in get
raise self.model.DoesNotExist(
rooms.models.Room.DoesNotExist: Room matching query does not exist.
>>>
# filter
# 1개이상을 위한값
>>> Room.objects.filter(pet_friendly=True)
<QuerySet [<Room: Beautiful House in 서울>, <Room: Apt in 서울>]>
>>> Room.objects.filter(pet_friendly=False)
<QuerySet []>
# filter 기능이 매우 강력함
>>> Room.objects.filter(price__gt=11)# 11값보다 큰 price, gt: greater
>>> Room.objects.filter(price__gte=12) # 서울 가격은 12임, gte: greater or equals, 크거나 같다
<QuerySet [<Room: Apt in 서울>]>
>>> Room.objects.filter(price__lte=12) # 작거나 같다
<QuerySet [<Room: Beautiful House in 서울>, <Room: Apt in 서울>]>
>>> Room.objects.filter(name__contains="서울") # 이름에 서울이 포함된 Room
<QuerySet [<Room: Beautiful House in 서울>, <Room: Apt in 서울>]>
>>> Room.objects.filter(name__startswith="Apt") # Apt로 시작하는 이름
<QuerySet [<Room: Apt in 서울>]>
# create
# 생성
>>> Amenity.objects.create(name="Amenity from the console",description="How cools is this!")
<Amenity: Amenity from the console>
# 확인
>>> Amenity.objects.get(pk=12)
<Amenity: Amenity from the console>
# 변수에 지정
>>> to_delete = Amenity.objects.get(pk=12)
# 변주 지정 확인
>>> to_delete
<Amenity: Amenity from the console>
# 엔티티 삭제
>>> to_delete.delete()
(1, {'rooms.Amenity': 1})
# 참고, Manager를 통해 삭제할 수 없음, 엔티티에서 삭제해야함
>>> Amenity.objects.delete(pk=12)
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'Manager' object has no attribute 'delete'