(ORM : Model class를 통해서 객체를 만들고 이 객체를 통해 DB에 접근하는 방법)
(QuerySet : objects를 사용하여 다수의 데이터를 가져오는 함수 사용시 반환되는 객체)
더 나아가 Prefetch()를 써야 하는 경우가 있음
prefetch_related의 필드에 추가적인 조건(filter등)을 걸고싶을때가 있는데
그때는 Prefetch()객체를 사용한다.
이건 좀 더 공부해야 이해가 갈거 같은데...
Django SQL query Logging을 통해서 쿼리가 어떤식으로 발생하는지 shell에서 확인가능하게 해줌
LOGGING = {
'disable_existing_loggers': False,
'version': 1,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'DEBUG',
},
},
'loggers': {
'django.db.backends': {
'handlers': ['console'],
'level': 'DEBUG',
'propagate': False,
},
},
}
그리고 사실 우리가 하는 a = Room.objects.all()는
우선 아무 동작도 하지 않고 있다가 a.name같은 호출이 있을때 작동한다!
= lazy loading