Django tutorial #04
작성된 API를 파이썬 인터프리터로 여러가지 동작을 실행한다.
# 프로젝트 파일을 쉘로 실행
$ python manage.py shell
# polls의 models.py안에 Choice,Question 테이블을 가져옴
>>> from polls.models import Choice, Question
# Select * from Question 의 ORM
>>> Question.objects.all()
<QuerySet []>
# timezone
>>> from django.utils import timezone
# Insert into Question(question_text, pub_date) values("What's new?", now())
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.save()
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)
# Update Question set question_text = "What's up?" where question_text = "What's new?"
>>> q.question_text = "What's up?"
>>> q.save()
# Select * from Question
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>
Select * from Question
을 예상하고 실행했는데 원하는 결과값이 나오지 않았다. 이는 polls/models.py의 Question, Choice 클래스 인스턴스에 다음과 같은 코드를 입력해줘야 예상값을 받을 수 있다.
class Question(models.Model):
# ...
def __str__(self):
return self.question_text
class Choice(models.Model):
# ...
def __str__(self):
return self.choice_text
그리고 추가적으로 Question 클래스 인스턴스에 다음 함수 메서드도 추가하였다.
# Django.utils의 timezone을 Import 하기위해서 기본 빌트인 모듈인 datetime을 import
import datetime
from django.db import models
from django.utils import timezone
# 현재시간(timestamp) - 1day(하루)를 지워서 게시한 날짜와 비교 (참고 : 값이 클수록 최근이다.)
class Question(models.Model):
# 등록 날짜가 오늘 기준 하루 뺀 날짜보다 큰가?
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
다시 인터프리터로 돌아와서 다음과 같은 코드를 실행해보았다.
>>> Question.objects.all()
<QuerySet [<Question: What's up?>]>
>>> Question.objects.get(pub_date__year=current_year)
<Question: What's up?>
>>> Question.objects.get(pk=1)
<Question: What's up?>
>>> q = Question.objects.get(pk=1)
>>> q.was_published_recently()
True
API를 통해 ORM 을 사용하면 SQL 구문과 유사하다는 것을 알 수 있다.
Author And Source
이 문제에 관하여(Django tutorial #04), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@minhyuk_ko/Django-tutorial-04저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)