학습 주제
Part2 Django 쉘(Shell)에서 모델 활용하기
Django Shell로 레코드 생성하기
학습 내용
장고 쉘에서도 어드민에서 레코드를 넣는 작업을 할 수 있다.
from polls.models import *
q1 = Question(question_text = "커피 vs 녹차")
from polls import *
로 하니, q1 생성이 안됐다. models까지 입력해야함.
지난시간에 배운 from django.utils import timezone
을 사용한다.
Question.objects.all()[0]
과 Question.objects.first()
는 같은 기능.
어드민 페이지에 가니 '커피 vs 녹차'를 생성되어 있지 않았다. q1은 아직 테이블에 저장되지 앟았기 때문. 장고 쉘에서 메모리 상에서만 존재하기 때문.
q1.id는 없는 반면, q2.id는 DB에 저장되면서 ID를 부여받았기 때문에 나온다.
어떻게하면 q1을 DB에 저장할까? q1.save()
를 하면 되는데, 오류가 난다.
polls_question.pub_date가 NULL이 되어선 안되는데 NULL이 되어 저장이 안됨.
q1에 시간을 지정해 주면 저장이 될 것 같다.
q1.pub_date = timezone.now()
로 저장하고 , q1.save()
를 하자 성공했다.
정상적으로 추가된 모습.
매번 timezone.now()로 시간을 넣어주는 건 귀찮음. 따라서 모델의 레코드가 만들어질 때 자동으로 현재시간을 추가하는 옵션을 사용한다.
auto_now=True
는 pub_date는 question이 업데이트 될 때마다 시간이 바뀜.
auto_now_add=True
는 question이 처음 생길 때 업데이트를 하게 된다.
저장도 잘 되고, q3.pub_date
에 현재시간이 잘 들어가 있는 모습을 볼 수 있다.
무언가 choice를 넣어주고 싶다면,
q3.choice_set.create(chocie_text='a')
초이스가 만들어짐.
votes와 question 필드는 어떻게 들어가 있는지 살펴보기로 한다.
question -> choice 방향으로 만드는 것을 해보았다. 이번엔 choice -> question 방향으로 만들어 본다.
choice_c = Choice(choice_text='c', question = q3)
choice_c.save()
지난번의 q3.choice_set.create(choice_text='b')
인 create 명령어를 통해 만든 것이 아닌 choice를 만들면서, question이 q3이라고 지정해줌.
꼭 만들었다면 save를 해줘야함. 연결이 안되어 있기 때문.
다음시간엔 수정, 삭제에 대해 알아본다.