QuerySet API에서 제공하는 자주 사용되는 Model method 이해하고
각각 method 실행 결과로 QuerySet이 반환되는 경우와 그렇지 않은 경우 파악하기 위해 공부했던 C.R.U.D 의 대표적인 메소드로 확인해 보겠다.
- Model method 종류
all()
,filter()
,exclude()
,values()
,values_list()
,get()
,create()
,
count()
,exists()
,update()
,delete()
,first()
,last()
,save()
,bulk_create()
..
- QuerySet을 반환하는 경우
<QuerySet [<Category: Category object (1)>, <Category: Category object (2)>]>
- 그렇지 않은 경우
<Category: Category object (1)>
,9
,True
..
# 예로 사용하는 클래스
class Actor(models.Model):
first_name = models.CharField(max_length=45)
last_name = models.CharField(max_length=45)
date_of_birth = models.DateField(null=True)
class Meta:
db_table = 'actors'
from movies.models import * =movies 라는 어플의 클래스를 import한다는것인데 여기서 뒤에 별은 전체 클래스를 의미한다.
create( ), save( ), bulk_create( )
위 create 메소드를 이용하여 추가 된 내역을 알 수 있다.
get( ), all( ), filter( ), exclude( ), values( ), values_list( )
위 메소드을 입력했을때의 값들을 알 수 있다. 맨 아래 12번 값을 보면 에러가 발생했는데values_list( )
의 경우QuerySet
이 반환되는 경우이기에 7번을 보면get메소드
는 그 값만을 불러오는QuerySet
을 반환하지 않는 메소드이기에get메소드
와 함께 사용했을때 에러가 발생한다.QuerySet
을 반환하는 않는 메소드에 반환하는 메소드를 함께 사용시 에러가 발생한다는것을 알 수 있다.
그래서 복수의 값들이 나오는 경우filter
를 사용하고get
은 하나의 값만 불러올때 사용한다.
작성하여 나온 값들을 봤을 때 두 메소드 모두QuerySet
을 반환 하지 않는다는것을 알 수 있다.update
의 경우update
된row
의 숫자가 나오고delete
의 경우 삭제된 개체 수와 개체 유형별 삭제 횟수가 나오게 되는 것이다.
추가로, QuerySets
을 반환하지 않는 method
는 아래와 같고, views.py
작성에 연결 되기에 해당 method
또한 연습을 지속적으로 해서 최대한 활용할 수 있게 익혀야겠다.
get_or_create()
exists()
count()
first()
last()
aggregate()