🌝 본 포스트는 리액트와 함께 장고 시작하기 Complete + 별도로 공부한 내용으로 이루어져있습니다
데이터베이스 질의 인터페이스를 제공
ModelCls.objects.all() #SELECT * FROM model;
ModelCls.objects.all().order_by('-id') #SELECT * FROM model ORDER BY id DESC;
ModelCls.objects.create(title='New') #INSERT INTO model (title) VALUES ('New');
예시
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"
import django
django.setup()
from instagram.models import Post
qs = Post.objects.all()
print(type(qs)) #<class 'django.db.models.query.QuerySet'>
print(qs.query) #SELECT "instagram_post"."id", "instagram_post"."message", "instagram_post"."photo", "instagram_post"."is_public", "instagram_post"."created_at", "instagram_post"."updated_at" FROM "instagram_post"
print(qs) #<QuerySet [<Post: 첫번째>, <Post: 두번째>, <Post: 세번째>]>
qs = Post.objects.all().order_by('-id')
print(qs) #<QuerySet [<Post: 세번째>, <Post: 두번째>, <Post: 첫번째>]>
for post in qs:
print(post.id, post.message)
Post.objects.all().filter(...).exclude(...)...
queryset.filter()
queryset.exclude()
queryset[인덱스]
: 해당 객체 없을 경우 예외 발생 (IndexError)
queryset.get()
:
해당 객체 없을 경우 예외 발생 (DoesNotExist)
두 개 이상 있을 경우 MultipleObjectsReturned
queryset.first()
queryset.last()
OR 조건을 사용하려면 django.db.models.Q
활용
정렬할 때는 모델 클래스의 Meta 속성으로 ordering 설정하기
1. django-extensions 설치하기
pip install django-extensions
2. INSTALLED_APPS에 추가
#settings.py
INSTALLED_APPS = [
...
"django_extensions"
...
]
❗ ISTALLED_APPS에서 django apps -> third apps -> locals apps 순으로 쓰면 좋음
3. shell_plus 실행
py manage.py shell_plus --print_sql --ipython
4. sql 확인
현재 Meta 속성으로 ordering = ['-id']
❗ queryset에서 직접 order_by 주면 기존 Meta 속성 무시
django-debug-toolbar 공식문서 바로가기
1. 설치하기
python -m pip install django-debug-toolbar
2.INSTALLED_APPS에 추가하기
INSTALLED_APPS = [
#...
'django.contrib.staticfiles',
#...
'debug_toolbar',
...
]
3. URLconf에 추가하기
#urls.py
if settings.DEBUG:
import debug_toolbar
urlpatterns += [
path('__debug__/', include(debug_toolbar.urls)),
]
4. MIDDLEWARE, INTERNAL_IPS 추가
#settings.py
MIDDLEWARE = [
# ...
'debug_toolbar.middleware.DebugToolbarMiddleware',
# ...
]
INTERNAL_IPS = [
# ...
'127.0.0.1',
# ...
]