본문 바로가기

Python_WEB/Django_Tutorial

[Django]Survey WEB Application Tutorial 3

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

 

Model instance reference | Django 문서 | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

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. 관리자 로그인

< Admin login page >

 

6. 관리자 사이트 접속 후 페이지

< Admin Login Page >

 

7.  poll app 관리 인덱스 페이지 표시

'''
polls/admin.py
'''
from django.contrib import admin
from .models import Question

admin.site.register(Question)

 

< Display poll app management index page >

 

8. 서식 확인

- 이 서식은 Question 모델에서 자동으로 생성되었습니다

 

- 모델의 각 필드 유형들은 (DateTimeField, CharField) 적절한 HTML 입력 위젯으로 표현됩니다.

  필드의 각 유형들은 Django 관리 사이트에서 어떻게 표현해되어야 할지 알고 있습니다.

 

- 각각의 DateTimeField 는 JavaScript 로 작성된 단축 기능과 연결됩니다.

  날짜는 "오늘"("Today") 버튼과 달력 팝업에서 입력할 수 있으며,

  시간은 "지금"("Now") 버튼과 일반적으로 입력하는 시간들을 제공하는 편리한 팝업을 통해서도 입력할 수 있습니다.

 

 

9. 히스토리 확인

https://docs.djangoproject.com/ko/3.0/intro/tutorial02/

 

첫 번째 장고 앱 작성하기, part 2 | Django 문서 | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com