Notice
Recent Posts
Recent Comments
관리 메뉴

안까먹을라고 쓰는 블로그

[Python_Django] 첫 번째 Django 앱 작성, 2부 (Feat. Django 공식사이트) 본문

Language/Python(Django)

[Python_Django] 첫 번째 Django 앱 작성, 2부 (Feat. Django 공식사이트)

YawnsDuzin 2022. 1. 28. 10:21

 

반응형

https://docs.djangoproject.com/en/4.0/intro/tutorial02/

 

Writing your first Django app, part 2 | Django documentation | Django

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

docs.djangoproject.com


이 자습서는 자습서 1 이 중단된 부분에서 시작합니다. 데이터베이스를 설정하고, 첫 번째 모델을 만들고, Django의 자동 생성 관리 사이트에 대해 간략히 소개하겠습니다.

데이터베이스 설정

이제 mysite/settings.py 를 열어보세요. Django 설정을 나타내는 모듈 수준 변수가 있는 일반 Python 모듈입니다.

기본적으로 구성은 SQLite를 사용합니다. 데이터베이스를 처음 사용하거나 Django를 사용하는 데 관심이 있다면 이것이 가장 쉬운 선택입니다. SQLite는 Python에 포함되어 있으므로 데이터베이스를 지원하기 위해 다른 것을 설치할 필요가 없습니다. 그러나 첫 번째 실제 프로젝트를 시작할 때 PostgreSQL과 같은 확장 가능한 데이터베이스를 사용하여 향후 데이터베이스 전환 문제를 피할 수 있습니다.

다른 데이터베이스를 사용하려면 적절한 데이터베이스 바인딩을 설치하고 데이터베이스 연결 설정과 일치하도록 DATABASES 'default' 항목에서 다음 키를 변경하십시오.

  • ENGINE 'django.db.backends.sqlite3', 'django.db.backends.postgresql', 'django.db.backends.mysql'또는 'django.db.backends.oracle'. 다른 백엔드 도 사용할 수 있습니다 .
  • NAME– 데이터베이스의 이름입니다. SQLite를 사용하는 경우 데이터베이스는 컴퓨터의 파일이 됩니다. 이 경우 NAME은 파일 이름을 포함한 해당 파일의 전체 절대 경로여야 합니다. 기본값인 BASE_DIR / 'db.sqlite3'은 프로젝트 디렉토리에 파일을 저장합니다.

SQLite를 데이터베이스로 사용하지 않는 경우 USER, PASSWORDHOST와 같은 추가 설정을 추가해야 합니다. 자세한 내용은 DATABASES에 대한 참조 문서를 참조하세요.

SQLite 이외의 데이터베이스의 경우

SQLite 이외의 데이터베이스를 사용하는 경우 이 시점까지 데이터베이스를 생성했는지 확인하십시오. 데이터베이스의 대화형 프롬프트 내에서"CREATE DATABASE database_name;"으로 생성합니다.
또한 mysite/settings.py에 제공된 데이터베이스 사용자에게 "데이터베이스 생성" 권한이 있는지 확인하십시오. 이것은 나중 튜토리얼에서 필요할 테스트 데이터베이스의 자동 생성을 허용합니다. SQLite를 사용하는 경우 미리 생성할 필요가 없습니다. 필요할 때 데이터베이스 파일이 자동으로 생성됩니다.

mysite/settings.py를 편집하는 동안 TIME_ZONE 을 시간대로 설정합니다.

또한 파일 상단의 INSTALLED_APPS 설정을 확인하십시오. 이것은 이 Django 인스턴스에서 활성화된 모든 Django 애플리케이션의 이름을 보유합니다. 앱은 여러 프로젝트에서 사용할 수 있으며 프로젝트에서 다른 사람이 사용할 수 있도록 패키지 및 배포할 수 있습니다.

기본적으로 INSTALLED_APPS 에는 Django와 함께 제공되는 다음 앱이 포함되어 있습니다.

이러한 응용 프로그램은 일반적인 경우의 편의를 위해 기본적으로 포함되어 있습니다.

이러한 응용 프로그램 중 일부는 최소한 하나의 데이터베이스 테이블을 사용하므로 사용하기 전에 데이터베이스에 테이블을 생성해야 합니다. 그렇게 하려면 다음 명령을 실행하십시오.

$ python manage.py migrate

migrate 명령은 INSTALLED_APPS 설정을 살펴보고 mysite/settings.py 파일의 데이터베이스 설정과 앱과 함께 제공되는 데이터베이스 마이그레이션에 따라 필요한 데이터베이스 테이블을 생성합니다(나중에 다룰 것입니다). 적용되는 각 마이그레이션에 대한 메시지가 표시됩니다. 관심이 있는 경우 데이터베이스에 대한 명령줄 클라이언트를 실행하고 \dt(PostgreSQL), SHOW TABLES를 입력합니다. (MariaDB, MySQL), .tables(SQLite) 또는 SELECT TABLE_NAME FROM USER_TABLES; (Oracle) Django가 생성한 테이블을 표시합니다.

미니멀리스트를 위한
위에서 말했듯이 기본 응용 프로그램은 일반적인 경우에 포함되지만 모든 사람에게 필요한 것은 아닙니다. 일부 또는 전부가 필요하지 않은 경우 migrate 를 실행하기 전에 INSTALLED_APPS에서 해당 라인을 자유롭게 주석 처리하거나 삭제하십시오. migrate 명령은 INSTALLED_APPS에 있는 앱에 대한 마이그레이션만 실행합니다.

모델 생성

이제 추가 메타데이터를 사용하여 기본적으로 데이터베이스 레이아웃인 모델을 정의합니다.

철학
모델은 데이터에 대한 정보의 확실한 단일 소스입니다. 여기에는 저장 중인 데이터의 필수 필드와 동작이 포함됩니다. Django는 DRY Principle 을 따릅니다. 목표는 한 곳에서 데이터 모델을 정의하고 자동으로 데이터 모델을 파생시키는 것입니다. 여기에는 마이그레이션이 포함됩니다. 예를 들어 Ruby On Rails와 달리 마이그레이션은 완전히 모델 파일에서 파생되며 본질적으로 Django가 현재 모델과 일치하도록 데이터베이스 스키마를 업데이트하기 위해 롤스루할 수 있는 기록입니다.


설문조사 앱에서 질문과 선택이라는 두 가지 모델을 만듭니다. 질문에는 질문과 발행일이 있습니다. 선택에는 선택 텍스트와 투표 집계라는 두 가지 필드가 있습니다. 각 선택은 질문과 연결됩니다.

이러한 개념은 Python 클래스로 표시됩니다. 다음과 같이 polls/models.py 파일을 편집합니다.

from django.db import models


class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

여기에서 각 모델은 django.db.models.Model의 하위 클래스인 클래스로 표시됩니다. 각 모델에는 여러 클래스 변수가 있으며 각각은 모델의 데이터베이스 필드를 나타냅니다.

각 필드는 Field 클래스의 인스턴스로 표시됩니다(예: 문자 필드의 경우 CharField, 날짜/시간의 경우 DateTimeField). 이것은 Django에게 각 필드가 어떤 유형의 데이터를 보유하는지 알려줍니다.

각 Field 인스턴스의 이름(예: question_text 또는 pub_date)은 기계 친화적인 형식의 필드 이름입니다. Python 코드에서 이 값을 사용하고 데이터베이스는 이 값을 열 이름으로 사용합니다.

Field 에 대한 선택적 첫 번째 위치 인수를 사용하여 사람이 읽을 수 있는 이름을 지정할 수 있습니다. 이것은 Django의 몇 가지 내성적인 부분에서 사용되며 문서화의 역할도 합니다. 이 필드가 제공되지 않으면 Django는 기계가 읽을 수 있는 이름을 사용합니다. 이 예에서는 Question.pub_date에 대해 사람이 읽을 수 있는 이름만 정의했습니다. 이 모델의 다른 모든 필드의 경우 사람이 읽을 수 있는 이름으로 필드의 기계 판독 가능 이름으로 충분합니다.

일부 Field 클래스에는 필수 인수가 있습니다. 예를 들어 CharField는 max_length를 지정해야 합니다. 이것은 데이터베이스 스키마뿐만 아니라 곧 보게 될 유효성 검사에서도 사용됩니다.

Field는 또한 다양한 선택적 인수를 가질 수 있습니다. 이 경우 투표의 default 값을 0으로 설정했습니다.

마지막으로 ForeignKey를 사용하여 관계를 정의합니다. 이는 Django에게 각 Choice가 단일 질문과 관련되어 있음을 알려줍니다. Django는 다대일, 다대다, 일대일과 같은 모든 공통 데이터베이스 관계를 지원합니다.


모델 활성화

이 작은 모델 코드는 Django에 많은 정보를 제공합니다. 이를 통해 Django는 다음을 수행할 수 있습니다.

  • 이 앱에 대한 데이터베이스 스키마(CREATE TABLE 문)를 만듭니다..
  • Question 및 Choice 객체에 액세스하기 위한 Python 데이터베이스 액세스 API를 만듭니다..

그러나 먼저 설문조사 앱이 설치되었음을 프로젝트에 알려야 합니다.

철학
Django 앱은 "플러그 가능"합니다. 여러 프로젝트에서 앱을 사용할 수 있으며 지정된 Django 설치에 묶일 필요가 없기 때문에 앱을 배포할 수 있습니다.

프로젝트에 앱을 포함하려면 INSTALLED_APPS 설정에서 구성 클래스에 대한 참조를 추가해야 합니다. PollsConfig 클래스는 polls/apps.py 파일에 있으므로 점으로 구분된 경로는 'polls.apps.PollsConfig'입니다. mysite/settings.py 파일을 편집하고 점으로 구분된 경로를 INSTALLED_APPS 설정에 추가합니다. 다음과 같이 표시됩니다.

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

이제 Django는 투표 앱을 포함하는 것을 알고 있습니다. 다른 명령을 실행해 보겠습니다.

$ python manage.py makemigrations polls

다음과 유사한 내용이 표시되어야 합니다.

makemigrations를 실행하여 Django에 모델을 일부 변경했으며(이 경우 새 모델을 만들었습니다) 변경 사항을 마이그레이션으로 저장하기를 원한다고 말합니다.

마이그레이션은 Django가 모델(및 데이터베이스 스키마)에 대한 변경 사항을 저장하는 방식입니다. 이는 디스크에 파일입니다. 원하는 경우 새 모델에 대한 마이그레이션을 읽을 수 있습니다. polls/migrations/0001_initial.py 파일입니다. 걱정하지 마세요. Django가 만들 때마다 읽을 수는 없지만 Django가 변경하는 방식을 수동으로 조정하려는 경우에 대비하여 사람이 편집할 수 있도록 설계되었습니다.

migrate 을 실행하고 데이터베이스 스키마를 자동으로 관리하는 명령이 있습니다. 이 명령은 마이그레이션이라고 합니다. 잠시 후에 이에 대해 설명하겠습니다. 하지만 먼저 마이그레이션에서 실행할 SQL을 보겠습니다. sqlmigrate 명령은 마이그레이션 이름을 가져와서 해당 SQL을 반환합니다.

python manage.py sqlmigrate polls 0001

다음과 유사한 내용이 표시되어야 합니다(가독성을 위해 형식을 다시 지정했습니다).

다음에 유의하십시오.

  • 정확한 출력은 사용 중인 데이터베이스에 따라 다릅니다. 위의 예는 PostgreSQL용으로 생성되었습니다.
  • 테이블 이름은 앱 이름(설문조사)과 모델의 소문자 이름(질문 및 선택)을 결합하여 자동으로 생성됩니다. (이 동작을 재정의할 수 있습니다.) 기본 키(ID)가 자동으로 추가됩니다. (이것도 무시할 수 있습니다.)
  • Primary Key (ID)가 자동으로 추가됩니다. (이것도 무시할 수 있습니다.)
  • 관례에 따라 Django는 foreign Key 필드 이름에 "_id"를 추가합니다. (예, 이것을 재정의할 수도 있습니다.)
  • foreign Key 관계는 FOREIGN KEY 제약 조건에 의해 명시적으로 만들어집니다. DEFERRABLE 부분에 대해 걱정하지 마십시오. 트랜잭션이 끝날 때까지 외래 키를 적용하지 않도록 PostgreSQL에 지시합니다.
  • 사용 중인 데이터베이스에 맞게 조정되므로 auto_increment(MySQL), serial(PostgreSQL) 또는 정수 기본 키 자동 증가(SQLite)와 같은 데이터베이스별 필드 유형이 자동으로 처리됩니다. 큰따옴표나 작은따옴표를 사용하여 필드 이름을 인용할 때도 마찬가지입니다.
  • sqlmigrate 명령은 실제로 데이터베이스에서 마이그레이션을 실행하지 않습니다. 대신 화면에 인쇄하여 SQL Django가 필요하다고 생각하는 것을 볼 수 있습니다. Django가 무엇을 할 것인지 확인하거나 변경을 위해 SQL 스크립트가 필요한 데이터베이스 관리자가 있는 경우에 유용합니다.

관심이 있다면 python manage.py check를 실행할 수도 있습니다. 이것은 마이그레이션을 하거나 데이터베이스를 건드리지 않고 프로젝트의 문제를 확인합니다.

이제 마이그레이션을 다시 실행하여 데이터베이스에 해당 모델 테이블을 생성합니다.

migrate 명령은 적용되지 않은 모든 마이그레이션을 취하고(Django는 django_migrations라는 데이터베이스의 특수 테이블을 사용하여 적용된 마이그레이션을 추적함) 데이터베이스에 대해 실행합니다. 데이터베이스에서 기본적으로 모델에 대한 변경 사항을 스키마와 동기화합니다. 

마이그레이션은 매우 강력하며 데이터베이스 또는 테이블을 삭제하고 새 테이블을 만들 필요 없이 프로젝트를 개발하면서 시간이 지남에 따라 모델을 변경할 수 있습니다. 데이터 손실 없이 라이브 데이터베이스 업그레이드에 특화되어 있습니다. 튜토리얼 후반부에서 더 자세히 다루겠지만 지금은 모델 변경에 대한 3단계 가이드를 기억하세요.

마이그레이션을 수행하고 적용하는 별도의 명령이 있는 이유는 마이그레이션을 버전 제어 시스템으로 커밋하고 앱과 함께 제공하기 때문입니다. 개발을 더 쉽게 만들 뿐만 아니라 다른 개발자와 프로덕션에서도 사용할 수 있습니다.

manage.py 유틸리티가 무엇을 할 수 있는지에 대한 전체 정보는 django-admin 문서를 읽어보세요


API 사용

이제 대화형 Python 셸로 이동하여 Django가 제공하는 무료 API를 사용해 보겠습니다. Python 셸을 호출하려면 다음 명령을 사용합니다.

python manage.py shell

manage.py가 DJANGO_SETTINGS_MODULE 환경 변수를 설정하여 Django에 mysite/settings.py 파일에 대한 Python 가져오기 경로를 제공하기 때문에 단순히 "python"을 입력하는 대신 이것을 사용합니다.

셸에 들어가면 데이터베이스 API를 탐색합니다.

>>> from polls.models import Choice, Question  # Import the model classes we just wrote.

# No questions are in the system yet.
>>> Question.objects.all()
<QuerySet []>

# Create a new Question.
# Support for time zones is enabled in the default settings file, so
# Django expects a datetime with tzinfo for pub_date. Use timezone.now()
# instead of datetime.datetime.now() and it will do the right thing.
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())

# Save the object into the database. You have to call save() explicitly.
>>> q.save()

# Now it has an ID.
>>> q.id
1

# Access model field values via Python attributes.
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)

# Change values by changing the attributes, then calling save().
>>> q.question_text = "What's up?"
>>> q.save()

# objects.all() displays all the questions in the database.
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>

잠깐 기다려요. <Question: Question 객체 (1)>은 이 객체에 대한 유용한 표현이 아닙니다. Question 모델(polls/models.py 파일)을 편집하고 Question과 Choice 둘 다에 __str__() 메서드를 추가하여 문제를 해결해 보겠습니다.

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

__str__() 메서드를 모델에 추가하는 것이 중요합니다. 대화형 프롬프트를 처리할 때 자신의 편의를 위해서 뿐만 아니라 Django의 자동 생성 관리자 전체에서 객체의 표현이 사용되기 때문입니다.

이 모델에 커스텀 메소드를 추가해 보겠습니다.

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)

django.utils.timezone에 있는 Python의 표준 datetime 모듈과 Django의 시간대 관련 유틸리티를 각각 참조하기 위해 import datetime 및 from django.utils import timezone이 추가되었습니다. Python의 시간대 처리에 익숙하지 않은 경우 시간대 지원 문서에서 자세히 알아볼 수 있습니다.

이러한 변경 사항을 저장하고 python manage.py 셸을 다시 실행하여 새로운 Python 대화형 셸을 시작합니다.

>>> from polls.models import Choice, Question

# Make sure our __str__() addition worked.
>>> Question.objects.all()
<QuerySet [<Question: What's up?>]>

# Django provides a rich database lookup API that's entirely driven by
# keyword arguments.
>>> Question.objects.filter(id=1)
<QuerySet [<Question: What's up?>]>
>>> Question.objects.filter(question_text__startswith='What')
<QuerySet [<Question: What's up?>]>

# Get the question that was published this year.
>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)
<Question: What's up?>

# Request an ID that doesn't exist, this will raise an exception.
>>> Question.objects.get(id=2)
Traceback (most recent call last):
    ...
DoesNotExist: Question matching query does not exist.

# Lookup by a primary key is the most common case, so Django provides a
# shortcut for primary-key exact lookups.
# The following is identical to Question.objects.get(id=1).
>>> Question.objects.get(pk=1)
<Question: What's up?>

# Make sure our custom method worked.
>>> q = Question.objects.get(pk=1)
>>> q.was_published_recently()
True

# Give the Question a couple of Choices. The create call constructs a new
# Choice object, does the INSERT statement, adds the choice to the set
# of available choices and returns the new Choice object. Django creates
# a set to hold the "other side" of a ForeignKey relation
# (e.g. a question's choice) which can be accessed via the API.
>>> q = Question.objects.get(pk=1)

# Display any choices from the related object set -- none so far.
>>> q.choice_set.all()
<QuerySet []>

# Create three choices.
>>> q.choice_set.create(choice_text='Not much', votes=0)
<Choice: Not much>
>>> q.choice_set.create(choice_text='The sky', votes=0)
<Choice: The sky>
>>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)

# Choice objects have API access to their related Question objects.
>>> c.question
<Question: What's up?>

# And vice versa: Question objects get access to Choice objects.
>>> q.choice_set.all()
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
>>> q.choice_set.count()
3

# The API automatically follows relationships as far as you need.
# Use double underscores to separate relationships.
# This works as many levels deep as you want; there's no limit.
# Find all Choices for any question whose pub_date is in this year
# (reusing the 'current_year' variable we created above).
>>> Choice.objects.filter(question__pub_date__year=current_year)
<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>

# Let's delete one of the choices. Use delete() for that.
>>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
>>> c.delete()

모델 관계에 대한 자세한 내용은 Accessing related objects 를 참조하세요. 이중 밑줄을 사용하여 API를 통해 필드 조회를 수행하는 방법에 대한 자세한 내용은 필드 조회를 참조하십시오. 데이터베이스 API에 대한 자세한 내용은 Database API reference 를 참조하세요


Django Admin 소개
철학
직원이나 클라이언트가 콘텐츠를 추가, 변경 및 삭제할 수 있도록 관리 사이트를 생성하는 것은 창의성이 많이 필요하지 않은 지루한 작업입니다. 이러한 이유로 Django는 모델에 대한 관리 인터페이스 생성을 완전히 자동화합니다.

Django는 "컨텐츠 게시자"와 "공개" 사이트가 명확하게 구분된 뉴스룸 환경에서 작성되었습니다. 사이트 관리자는 시스템을 사용하여 뉴스 기사, 이벤트, 스포츠 점수 등을 추가하고 해당 콘텐츠는 공개 사이트에 표시됩니다. Django는 사이트 관리자가 콘텐츠를 편집할 수 있는 통합 인터페이스를 만드는 문제를 해결합니다.

관리자는 사이트 방문자가 사용할 수 없습니다. 사이트 관리자용입니다.

■ 관리자 생성
먼저 관리자 사이트에 로그인할 수 있는 사용자를 만들어야 합니다. 다음 명령을 실행합니다.

python manage.py createsuperuser

원하는 사용자 이름을 입력하고 Enter 키를 누릅니다.

Username: admin

그러면 원하는 이메일 주소를 입력하라는 메시지가 표시됩니다.

Email address: admin@example.com

마지막 단계는 비밀번호를 입력하는 것입니다. 비밀번호를 두 번 입력하라는 메시지가 표시되며 첫 번째 확인을 위해 두 번째로 입력합니다.

Password: **********
Password (again): *********
Superuser created successfully.


■ 개발 서버 시작
Django 관리 사이트는 기본적으로 활성화되어 있습니다. 개발 서버를 시작하고 살펴보겠습니다.

서버가 실행 중이 아니면 다음과 같이 시작하십시오.

$ python manage.py runserver

이제 웹 브라우저를 열고 로컬 도메인의 "/admin/"으로 이동합니다(예: http://127.0.0.1:8000/admin/). 관리자의 로그인 화면이 표시되어야 합니다.

번역은 기본적으로 켜져 있으므로 LANGUAGE_CODE를 설정하면 로그인 화면이 주어진 언어로 표시됩니다(Django에 적절한 번역이 있는 경우).

■ 관리 사이트로 이동
이제 이전 단계에서 생성한 수퍼유저 계정으로 로그인을 시도합니다. Django 관리자 색인 페이지가 표시되어야 합니다.


몇 가지 유형의 편집 가능한 콘텐츠(그룹 및 사용자)가 표시되어야 합니다. Django에서 제공하는 인증 프레임워크인 django.contrib.auth에서 제공합니다.

■ 관리자에서 투표 앱을 수정 가능하게 만들기
하지만 설문조사 앱은 어디에 있습니까? 관리자 색인 페이지에는 표시되지 않습니다.

한 가지만 더 해야 합니다. 질문 개체에 관리 인터페이스가 있음을 관리자에게 알려야 합니다. 이렇게 하려면 polls/admin.py 파일을 열고 다음과 같이 편집합니다.

from django.contrib import admin

from .models import Question

admin.site.register(Question)


■ 무료 관리 기능 살펴보기
이제 Question 을 등록했으므로 Django는 관리자 색인 페이지에 표시되어야 한다는 것을 알고 있습니다.

"Question"을 클릭하십시오. 이제 질문이 있는 "변경 목록" 페이지에 있습니다. 이 페이지는 데이터베이스의 모든 질문을 표시하고 하나를 선택하여 변경할 수 있도록 합니다.
그것은 우리가 이전에 만든 "What's up?"  질문입니다.

"What’s up?"를 클릭하여, 그것을 수정할 수 있습니다.

여기서 주의할 사항

  • 양식은 질문 모델에서 자동으로 생성됩니다.
  • 다양한 모델 필드 유형(DateTimeField, CharField) 은 적절한 HTML 입력 위젯에 해당합니다. 각 유형의 필드는 Django 관리자에 표시되는 방법을 알고 있습니다.
  • DateTimeField 에는 무료 JavaScript 단축키가 제공됩니다. 날짜에는 "오늘" 바로 가기 및 캘린더 팝업이 표시되고 시간에는 "지금" 바로 가기 및 일반적으로 입력되는 시간을 나열하는 편리한 팝업이 표시됩니다.

페이지 하단에는 몇 가지 옵션이 있습니다.

  • Save – 변경 사항을 저장하고 이 유형의 개체에 대한 변경 목록 페이지로 돌아갑니다.
  • Save and continue editing – 변경 사항을 저장하고 이 개체에 대한 관리 페이지를 다시 로드합니다.
  • Save and add another – 변경 사항을 저장하고 이 유형의 개체에 대한 새 빈 양식을 로드합니다.
  • Delete – 삭제 확인 페이지를 표시합니다.

"게시된 날짜"의 값이 튜토리얼 1에서 질문을 생성한 시간과 일치하지 않으면 TIME_ZONE 설정에 대한 올바른 값을 설정하는 것을 잊었다는 의미일 수 있습니다. 변경하고 페이지를 새로고침한 다음 올바른 값이 나타나는지 확인하십시오.

"Today" 및 "Now" 바로 가기를 클릭하여 "게시된 날짜"를 변경합니다. 그런 다음 "저장하고 편집 계속하기"를 클릭하십시오. 그런 다음 오른쪽 상단의 "기록"을 클릭하십시오. Django 관리자를 통해 이 객체에 대한 모든 변경 사항을 나열하는 페이지가 표시되며 변경한 사람의 타임스탬프와 사용자 이름이 표시됩니다.

모델 API에 익숙하고 관리 사이트에 익숙해지면 이 자습서의 3부를 읽고 설문 조사 앱에 더 많은 보기를 추가하는 방법에 대해 알아보세요.

끝~~

반응형
Comments