8. Django Shell 사용하기

data_hamster·2023년 4월 25일
0

학습주제
Django Shell 사용하기

학습내용
장고 쉘은 파이썬 쉘과 겉모습은 똑같음.
파이썬 쉘은 파이썬 코드를 한단계씩 실행할 수 있게 함.

>>> a = 5
>>> a += 5
>>> print(a)
10

장고 쉘의 접근은
python manage.py shell

파이썬 때처럼 >>>로 시작하는 것을 볼 수 있다.
장고 환경이 그대로 로딩된다고 보면 된다. 지금까지 정의한 모델들을 그대로 이용할 수 있다. 하지만 파이썬 처럼 import를 해주어야 한다.
from polls.models import *
Qestion

장고 쉘은 전체 프로젝트 관점으로 실행 되기 때문에 앱 단위로 접근해줘야 함. Question은 질문 목록을 저장한 테이블인데, 이를 장고 쉘에 접근하려면,
Qestion.objects.all()

이렇게 뜬다. 마찬가지로 초이스도 가져올 수 있다.
Choice.objects.all()

비어있는 것을 볼 수 있다. admin에서 Choice를 추가해준다.


Choice도 str을 설정해주지 않아 다음처럼 제목이 생성된다.

def __str__(self):
	return f'{self.choice_text}'

이렇게 설정해준다.
초이스의 문자열 제목이 choice_text로 출력된다.


그러나 장고쉘은 반영이 되지 않는다. 장고 쉘은 자동로딩이 되지 않기 때문에 껐다가 다시 켜야한다. 물론 import도 다시 해줘야 한다. Choice.objects.all()을 입력하니 잘 뜬다.

초이스의 각 값들을 출력해보고자 한다. 초이스의 모든 오브젝트를 받아 첫번째 레코드를 choice에 저장하면 각 필드에 접근할 수 있게 된다.
choice = Choice.objects.all()[0]


question을 foreign key로 가져왔기 때문에 접근도 할 수 있다.


이렇게 foreign key를 이용해 타고 타고 넘어가 접근할 수도 있다.

마치 장고 어드민에서 바다에 들어간 다음, 목록에서 눈 모양을 누르면 해당 question 레코드로 넘어가는 것처럼 보인다. choice에서 question의 id에도 접근할 수 있다.

question에서는 choice를 읽어올 수 있을까? 답은 아니다. question에서는 choice에 대한 foreign key가 정의되어 있지 않음. 하나의 choice로 접근할 수 는 없음. foreign key 설정으로 보아 여러 choice(집합, set)는 하나의 question에 속해 있다고 볼 수 있다.

이런 관계에선 question.choice_set.all() 으로 접근한다.

요약

Choice에선 Question으로 바로 접근이 가능하다. 왜냐하면, Choice에선 question이 foreign key로 정의되어 있기 때문. 하지만 Question은 하나의 Choice만 갖고 있는 것이 아님. Question은 Question을 foreign key로 하는 많은 Choice들을 갖고 있을 수 있음 (산, 강, 바다..) 그럴 떄는 question.choice_set.all() 형태로 집합으로 접근함. 리스트 집합으로 받았는데, 각 인덱스를 통해 choice의 속성에 접근도 가능함.

profile
반갑습니다 햄스터 좋아합니다

0개의 댓글