bestwish
Hong's Tistory
bestwish
전체 방문자
오늘
어제
  • 분류 전체보기 (32)
    • DevOps (21)
      • Django (15)
      • TIL (2)
      • Python (2)
      • Git (0)
      • Docker (1)
      • Infra (1)
    • Algorithm (3)
      • 백준문제 (3)
      • 이론 (0)
    • CS (6)
      • Data Structure (6)

인기 글

최근 글

hELLO · Designed By 정상우.
bestwish

Hong's Tistory

DevOps/Django

[Django] django extensions shell_plus 사용하기

2022. 5. 16. 00:42

공식문서

extension shell_plus의 특징

  • 장고 ORM이 어떻게 동작하는지 알아 볼 수 있다.
  • 필요한 몇몇 기능들을 자동으로 import를 해준다.
  • (주의사항)import 이름이 겹쳐버리면 overwirte 되어버린다.
  • shell에서 직접 정렬하면 모델 Meta에 지정한 것이 무시가 된다.

 

설치 및 실행

1. django extensions 설치

$ pip install django-extensions

 

2. settings.py에 추가.

INSTALLED_APPS = [
	...
	'django_extensions',
	...
]

 

3. 실행

$ python manage.py shell_plus --print-sql
  • 실행하면 자동으로 import 해준다.
# Shell Plus Model Imports
from django.contrib.admin.models import LogEntry
from django.contrib.auth.models import Group, Permission, User
from django.contrib.contenttypes.models import ContentType
from django.contrib.sessions.models import Session
from instagram.models import Post
# Shell Plus Django Imports
from django.core.cache import cache
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import transaction
from django.db.models import Avg, Case, Count, F, Max, Min, Prefetch, Q, Sum, When
from django.utils import timezone
from django.urls import reverse
from django.db.models import Exists, OuterRef, Subquery

 

실행 예제

1. models.py

class Post(models.Model):
    message = models.TextField()
    photo = models.ImageField(blank=True, upload_to='instagram/post/%Y/%m/%d')
    is_public = models.BooleanField(default=False, verbose_name='공개여부')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True) 

    def __str__(self):
        # return f"Custom Post object ({self.message})"
        return self.message

    class Meta:
        ordering = ['-id']

 

2. extensions 실행

$ python manage.py shell_plus --print-sql
from instagram.models import Post
Post.objects.all()

 

3. 결과

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"
 ORDER BY "instagram_post"."id" DESC
 LIMIT 21
Execution time: 0.000000s [Database: default]
<QuerySet [<Post: 세번째 글>, <Post: 두번째 글>, <Post: 첫번째 글>]>

4. 기타

  • Post.objects.all()[start:stop:step] 명령어로 범위조건을 추가할 수 있는데, step이 들어가는 순간 QuerySet타입이 List 타입으로 바뀐다.

'DevOps > Django' 카테고리의 다른 글

[Django] ForeignKey  (0) 2022.05.17
[Django] django-debug-toolbar 사용하기  (0) 2022.05.16
[Django] 장고 모델(ORM)  (0) 2022.05.11
[DRF] simple-jwt와 cumstom user  (0) 2022.03.27
[DRF] pagination custom  (0) 2022.03.24
    'DevOps/Django' 카테고리의 다른 글
    • [Django] ForeignKey
    • [Django] django-debug-toolbar 사용하기
    • [Django] 장고 모델(ORM)
    • [DRF] simple-jwt와 cumstom user
    bestwish
    bestwish

    티스토리툴바