์ฅ๊ณ ์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก SQLite๊ฐ ํฌํจ๋์ด ์์ด ๋ณ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์นํ ํ์๊ฐ ์๋ค.
mysite/setting.py
๋ฅผ ํ์ธํด๋ณด๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ ์ ๋ณผ ์ ์๋ค.
migrate ๋ช ๋ น์ด๋ INSTALLED_APPS๋ฅผ ๋ณด๊ณ , ํ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํด์ค๋ค.
python manage.py migrate
๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ์ด์์์ ์ ์ํ๋ค.
Django ์์๋ DB ๋ฅผ model.py์ ์ค์ ํด์ค์ผ๋ก์จ ๋ง๋ค์ด์ค๋ค.
ํํ ๋ฆฌ์ผ์ ๊ฒฝ์ฐ ๋๊ฐ์ง ๋ชจ๋ธ์ ์์ฑํ๋ค.
Question : ์ง๋ฌธ๊ณผ ๊ฒ์ ๋ ์ง
Choice : ์ ํ ํ
์คํธ์ ํฌํ ์ง๊ณ
์ด ๋ด์ฉ์ models.py ์์ ์์ ํด๋ณด์
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 ์ ์์๋ฐ์์ผํ๋ค.
Question์ ๊ฒฝ์ฐ, CharField ์ DateTimeField๋ฅผ ์ธ์คํด์ค๋ก ๊ฐ์ง๊ณ ์๋ค. ์ด๋ค ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ์๋ ค์ค๋ค.
Charfield : ํ ์ค ์ ๋์ ๋ฌธ์
DateTimeField : ๋ ์ง์ ์๊ฐ
IntegerField : ์ซ์(์ ์)ํ์
max_length : ์ต๋ ๊ธ์์
default=0 : ์ด๊ธฐ๊ฐ ์ง์
ForeignKey๋ Choice์ Question์ ์ฐ๊ฒฐํด์ฃผ๋ ๊ด๊ณ๋ค
Foreignkey
๋ชจ๋ธ์ ์์ฑํ๊ณ ๊ผญ ํด์ผํ๋ ๊ฒ์ด ๋ชจ๋ธ ํ์ฑํ์ด๋ค.
polls ์ฑ์ด ์ค์น ๋์์ INSTALLED_APPS ์ ์๋ ค์ฃผ์
mysite/settings.py
# settings.py ํ์ผ ์ด๊ธฐ
์๋ ๋ด์ฉ ์ถ๊ฐ
INSTALLED_APPS = [
'polls.apps.PollsConfig' #์ถ๊ฐ
'django.contrib.admin', # ์๋๋ด์ฉ๋ค์ ๊ธฐ๋ณธ์ผ๋ก ์์ ๊ฒ์
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
* ํ์ : ์ฑ์ด๋ฆ.apps.app์ด๋ฆ(๋งจ์๋๋ฌธ์)Config
์ ๋ด์ฉ์ polls ๋ฐ์ migrations ํด๋๋ฅผ ๋ง๋ค์ด์ ์ฅ๊ณ ์ ๋๋น๊ฐ ์ํตํ ์ ์๊ฒ ํ๊ธฐ
python manage.py makemigrations polls
๊ทธ๋ผ ์๋์ ๊ฐ์ด ๋์จ๋ค.
Migrations for 'polls': polls/migrations/0001_initial.py - Create model Question - Create model Choice
makemigrations๋ผ๋ ๋ช ๋ น์ด๋ Django์๊ฒ '๋ชจ๋ธ์ ์ผ๋ถ ๋ณ๊ฒฝํ๊ณ , ๋ณ๊ฒฝ ์ฌํญ ๋ง์ด๊ทธ๋ ์ด์ ํ ๋' ๋ผ๊ณ ๋งํ๋ ๊ฒ์ด๋ค.
python manage.py sqlmigrate polls 0001
# 0001 ํ์ผ ์์ฑ๋ ๊ฒ ๋ง์ด๊ทธ๋ ์ด์
๋ง์ฝ, migrate (๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉ)ํ ํ์ผ๋ค์ ๋ณด๊ณ ์ ํ๋ค๋ฉด
python manage.py showmigrations # x ์ฒดํฌ ๋ ๊ฒ์ด ์๋ฃ๋ ๋ฐ์ดํฐ ํ์ผ๋ค
python manage.py migrate
# ์ต์ข
์ ์ผ๋ก ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฅํด์ค๋ค.
# ์ฌ๊ธฐ๊น์ง polls์ app์ model์ด ํ๋ก์ ํธ์ ์
๋ฐ์ดํธ ๋จ !!!
Django ๊ฐ ์ ๊ณตํ๋ ๋ฌด๋ฃ API๋ฅผ ์ฌ์ฉํด๋ณด์
$ python manage.py shell
# shell ์ ๋ค์ด๊ฐ์ DB ์์ฑํ๊ธฐ
>>> from polls.models import Choice, Question
>>> Question.objects.all()
<QuerySet []>
>>> from django.utils import timezone
>>> q = Question(question_text="What's new?", pub_date=timezone.now())
>>> q.save()
>>> q.id
1
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)
>>> q.question_text = "What's up?"
>>> q.save()
>>> Question.objects.all()
<QuerySet [<Question: Question object (1)>]>
์์ ๋๋ก ๋๋ฉด ๋ด๊ฐ question ์ ์
๋ ฅํ์ ๋,
์๋ ๊ทธ๋ฆผ์ฒ๋ผ ํด๋ฆญํ๊ณ ๋ค์ด๊ฐ์ผ question text ๋ฅผ ์ ์ ์๋ค.
ํด๋ฆญํด์ ๋ค์ด๊ฐ์ง ์์๋ Question object ๋ถ๋ถ์
Question text ๊ฐ ๋ฐ๋ก ๋ณด์ด๊ฒ ์ค์ ํ์
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
### ... ๋ถ๋ถ์ ์๋ ์๋ ๋ถ๋ถ!! ์ง์ฐ์ง ๋ง๊ณ ์๋์ ์ถ๊ฐํ๋ฉด ๋๋ค.
๊ด๋ฆฌ ์ฌ์ดํธ์ ๋ก๊ทธ์ธ ํ ์ ์๋ ๊ด๋ฆฌ์๋ฅผ ์์ฑํด๋ณด์.
python manage.py createsuperuser
# user name, email, password ๋ฑ๋กํ๋ผ๊ณ ๋ฐํ
๋ฐ ์
๋ ฅํ๋ฉด ๋๋ค!
# password ๋ ์
๋ ฅํด๋ ํฐ๋ฏธ๋์์ ์ํ๋ ํ
๋ฐ ์
๋ ฅ๋๊ณ ์๋ ๊ฑฐ๋๊น
๊ทธ๋ฅ ์
๋ ฅํ๋ฉด ๋๋ค ~
์๋ฒ๋ฅผ ํ์ธํด๋ณด์
python manage.py runserver
์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ , ๋ก์ปฌ ๋๋ฉ์ธ(http://127.0.0.1:8000/)์์ /admin ์ผ๋ก ์ด๋
๊ด๋ฆฌ์์ ๋ก๊ทธ์ธ ํ๋ฉด์ด ํ์๋์ด์ผํ๋ค.
โ๐ป ๊ทธ๋ฌ๋!! ์์ง polls app์ admin์์ ๊ด๋ฆฌํ ์ ์๋๋ก ์ค์ ํ์ง ์์๋ค.
Question ๊ฐ์ฒด์ ๊ด๋ฆฌ์๊ฐ ์์์ ์๋ ค์ค์ผ ํ๋ค.
polls/admin.py
# ์์ ๊ฒฝ๋ก์์ ์๋ ๋ด์ฉ ์
๋ ฅ
from django.contrib import admin
from .models import Question
admin.site.register(Question)