1. __str__() 메소드를 Question과 Choice에 추가
객체의 표현을 대화식 프롬프트에서 편하게 보려는 이유 말고도,
Django 가 자동으로 생성하는 관리 사이트 에서도 객체의 표현이 사용
'''
polls/models.py
'''
from django.db import models
class Question(models.Model):
# ...
def __str__(self):
return self.question_text
class Choice(models.Model):
# ...
def __str__(self):
return self.choice_text
1-1. Model.__str__()
'''
Model.__str__() Example
'''
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
def __str__(self):
return '%s %s' % (self.first_name, self.last_name)
https://docs.djangoproject.com/ko/3.0/ref/models/instances/#str
2. 메소드 추가
import datetime : Python의 표준 모듈인 datetime 모듈
from django.utils import timezone : Django의 시간대 관련 유틸리티인 django.utils.timezone을 참조
'''
polls/models.py
'''
import datetime
from django.db import models
from django.utils import timezone
class Question(models.Model):
# ...
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
3. Python Shell
Django에서 동작하는 모든 명령을 대화식 Python 쉘에서 그대로 테스트 가능
py manage.py shell
from polls.models import Choice, Question
# __str __ () 추가가 작동했는지 확인하십시오.
Question.objects.all()
# Django는 전적으로 주도하는 풍부한 데이터베이스 조회 API를 제공합니다.
# 키워드 인수
Question.objects.filter(id=1)
Question.objects.filter(question_text__startswith='What')
# 올해 생성된 질문을 가져온다.
from django.utils import timezone
current_year = timezone.now().year
Question.objects.get(pub_date__year=current_year)
# 존재하지 않는 ID를 요청하면 예외가 발생합니다
Question.objects.get(id=2)
# 기본 키를 통한 조회가 가장 일반적인 경우이므로 Django는 기본 키 정확한 조회를 위한 단축키입니다.
# 다음은 Question.objects.get (id = 1)과 동일합니다.
Question.objects.get(pk=1)
# 우리의 사용자 정의 방법이 작동했는지 확인하십시오.
q = Question.objects.get(pk=1)
q.was_published_recently()
# 질문에 몇 가지 선택을하십시오. create call은 새로운 것을 생성합니다
# Choice 객체는 INSERT 문을 수행하고 선택 사항을 세트에 추가합니다.
# 사용 가능한 선택 수 및 새로운 Choice 개체를 반환합니다. 장고가 만듭니다
# ForeignKey 관계의 "다른 쪽"을 담는 세트 API를 통해 액세스 할 수 있는(예 : 질문 선택)
q = Question.objects.get(pk=1)
# 관련 오브젝트 세트에서 선택 사항을 표시하십시오.
q.choice_set.all()
# 세 가지 선택 사항을 작성하십시오.
q.choice_set.create(choice_text='Not much', votes=0)
q.choice_set.create(choice_text='The sky', votes=0)
c = q.choice_set.create(choice_text='Just hacking again', votes=0)
# Choice 객체는 관련 Question 객체에 대한 API 액세스 권한을 갖습니다.
c.question
# 반대의 경우도 마찬가지입니다. 질문 개체는 Choice 개체에 액세스 할 수 있습니다.
q.choice_set.all()
q.choice_set.count()
# API는 필요한 한 자동으로 관계를 따릅니다.
# 이중 밑줄을 사용하여 관계를 분리하십시오.
# 이것은 당신이 원하는만큼 많은 수준에서 작동합니다; 제한이 없습니다.
# 올해 pub_date의 질문에 대한 모든 선택을 찾으십시오
# (위에서 만든 'current_year'변수 재사용).
Choice.objects.filter(question__pub_date__year=current_year)
# 선택 중 하나를 삭제합시다. 이를 위해 delete ()를 사용하십시오.
c = q.choice_set.filter(choice_text__startswith='Just hacking')
c.delete()
4. 관리자 생성
py manage.py createsuperuser
5. 서버 실행
py manage.py runserver
6. 관리자 로그인
6. 관리자 사이트 접속 후 페이지
7. poll app 관리 인덱스 페이지 표시
'''
polls/admin.py
'''
from django.contrib import admin
from .models import Question
admin.site.register(Question)
8. 서식 확인
- 이 서식은 Question 모델에서 자동으로 생성되었습니다
- 모델의 각 필드 유형들은 (DateTimeField, CharField) 적절한 HTML 입력 위젯으로 표현됩니다.
필드의 각 유형들은 Django 관리 사이트에서 어떻게 표현해되어야 할지 알고 있습니다.
- 각각의 DateTimeField 는 JavaScript 로 작성된 단축 기능과 연결됩니다.
날짜는 "오늘"("Today") 버튼과 달력 팝업에서 입력할 수 있으며,
시간은 "지금"("Now") 버튼과 일반적으로 입력하는 시간들을 제공하는 편리한 팝업을 통해서도 입력할 수 있습니다.
9. 히스토리 확인
https://docs.djangoproject.com/ko/3.0/intro/tutorial02/
'Python_WEB > Django_Tutorial' 카테고리의 다른 글
[Django]Survey WEB Application Tutorial 5 (0) | 2020.04.30 |
---|---|
[Django]'polls" is not a registered namespace Error (0) | 2020.04.29 |
[Django]Survey WEB Application Tutorial 4 (0) | 2020.04.29 |
[Django]Survey WEB Application Tutorial 2 (0) | 2020.04.29 |
[Django]Survey WEB Application Tutorial 1 (0) | 2020.04.29 |