all()은 객체만 출력한다.
>>> Menu.objects.all()
<QuerySet [<Menu: 음료>, <Menu: 푸드>, <Menu: 상품>, <Menu: 카드>, <Menu: 메뉴 이야기>]>
values()는 딕셔너리 타입으로 출력한다.
>>> Menu.objects.values()
<QuerySet [{'id': 1, 'name': '음료'}, {'id': 2, 'name': '푸드'}, {'id': 3, 'name': '상품'}, {'id': 4, 'name': '카드'}, {'id': 5, 'name': '메뉴 이야기'}]>
filter()는 조건에 맞는 쿼리셋(객체 여러개)을 반환한다.
>>> Drink.objects.filter(category_id=1)
<QuerySet [<Drink: 나이트로 바닐라 크림>, <Drink: 나이트로 콜드 브루>, <Drink: 돌체 콜드 브루>]>
get()은 쿼리에 맞는 객체 하나만 반환한다.
>>> Drink.objects.get(category_id=1)
.
.
.
products.models.Drink.MultipleObjectsReturned: get() returned more than one Drink -- it returned 3!
filter() 예시에서 filter를 get으로 바꾼 결과, 위와 같은 예외를 확인할 수 있었다.
✅ get()을 사용할 때는 객체 하나만을 결과로 출력할 수 있을 때 사용하는 걸로!
>>> Drink.objects.get(id=1)
<Drink: 나이트로 바닐라 크림>
>>> Drink.objects.filter(category_id=1).first()
<Drink: 나이트로 바닐라 크림>
get()은 filter().first()와 같다고 볼 수 있다.
객체를 만드는 동시에 저장까지 한다.
Menu 클래스에 다섯개의 객체가 존재한다.
>>> Menu.objects.all()
<QuerySet [<Menu: Menu object (1)>, <Menu: Menu object (2)>, <Menu: Menu object (3)>, <Menu: Menu object (4)>, <Menu: Menu object (5)>]>
create()를 사용하여 객체를 생성하고 확인해보면 아래와 같이 객체가 하나 더 추가된 것을 확인할 수 있다.
>>> Menu.objects.create(name="상품")
<Menu: Menu object (6)>
>>> Menu.objects.all()
<QuerySet [<Menu: Menu object (1)>, <Menu: Menu object (2)>, <Menu: Menu object (3)>, <Menu: Menu object (4)>, <Menu: Menu object (5)>, <Menu: Menu object (6)>]>
모델 클래스에 인자를 전달하여 호출한 뒤 save()하면 객체를 생성 또는 변경할 수 있다.
>>> a = Menu.objects.first()
>>> a.__dict__
{'_state': <django.db.models.base.ModelState object at 0x7fc5c27dd8e0>,
'id': 1, 'name': '음료'}
a가 가진 name 컨텐츠를 '푸드'로 바꾸고 save()를 하면 아래와 같이 정보가 변경된 것을 확인할 수 있다.
>>> a.name = '푸드'
>>> a.save()
>>> Menu.objects.first().__dict__
{'_state': <django.db.models.base.ModelState object at 0x7fc5c27dd9a0>,
'id': 1, 'name': '푸드'}