django with model - pai-plznw4me/django-initializer GitHub Wiki
๊ฐ์
Django ์์ Model์ ๋ค๋ฃฐ๋ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ์ ์ธ ํจํด์ ๊ธฐ๋กํ Page.
๊ธฐ๋ณธ์ ์ธ ์ง์
Django Model ์ด๋ Django ์์ Database table ์ ๊ทผํด์ ์ ์ดํ๊ธฐ ์ํด ์ ์ํด ๋์ class ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
Django ๋ ์ด Model class ์ ํตํด DB ๋ด table ์ ์์ฑํ๊ณ ์ ๊ทผํ๊ณ ๋ณ๊ฒฝํ ์ ์๋ค.(CRUD)
Django ๋ชจ๋ธ์ ์ค๊ณ ์์ด๋์ด๋ ํด๋น ํ์ด์ง๋ฅผ ์ฐธ๊ณ ํ์.
ํด๋น ํ์ด์ง์์๋ ๋จ์ํ๊ฒ Hands-On ์ผ๋ก Django ์์ ๋จ์ํ๊ฒ ๋ชจ๋ธ์ ์์ฑํ ํ DB์ ๋ง๋ค๊ณ ์ ๊ทผํ๋ ๊ฒ ๊น์ง์ ํจํด์ ๋ค๋ฃฌ๋ค.
๊ธฐ๋ณธ์ ์ธ DB ์ฉ์ด:
- Table
- feature, entry, field, column
- instance, record, row
- db : db ๋ ์ฌ๋ฌ table ์ ๋ณด๋ฅผ ๊ฐ์ง์ ์๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ด๊ณ ์๋ ํ์ผ์ด๋ค.
์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด ํ ์คํธ ํ์ผ์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ํ์ผ์ด์ง ์๋๊ฐ?
db๋ ๊ฐ์ ๊ฐ๋ ์ด๋ค ์ฌ๋ฌ ํ ์ด๋ธ์ ๋ด๊ณ ์๋ ํ์ผ์ด๋ค.
- entity, attributes
์ํฐํฐ
entity๋ ํ์ค ์ธ๊ณ์ ์กด์ฌํ๋ ๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์์ ํํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ถ์์ ์ธ ๊ฐ๋ ์ ๋๋ค.
์ํฐํฐ๋ฅผ ์ค๋ช ํ๋ ํน์ฑ์Attribute๋ผ๊ณ ํฉ๋๋ค. ์ด๋ฌํ ํน์ฑ๋ค์ ๊ฐ๊ฐ์ ์ํฐํฐ๋ง๋ค ๋ค๋ฅผ ์ ์๊ณ , ์ด๋ฅผ ํตํด ์ํฐํฐ๋ฅผ ๊ตฌ๋ณํ ์ ์์ต๋๋ค.
- ์ถ์์ ๊ฐ๋ ์ด ๋ญ๋๋ฉด ์๋ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ดํด๊ฐ ์ฝ๋ค. ์ฌ๋์ด ์๋ค. ์ฌ๋์ ํน์ง(attribute) ์ค์ ๋ ์ฝ ์ ๊ฐ์๋ฅผ ๊ธฐ๋กํ๊ธธ ์ํ๋ค๊ณ ์น์.
์ฐ๋ฆฌ๊ฐ ๊ด์ฐฐํ ๋์ ์์ฒด๋ฅผ entity ๋ผ๊ณ ํ๋ค. entity ๊ฐ ๊ฐ์ง๊ณ ์๋ ํน์ฑ๋ค์ attribute ๋ผ๊ณ ํ๋ค.
๊ด์ฐฐํ ํน์ง๋ค์ db ํ ํ๋ค๋ฉด ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ๋ค์ record, instance ๋ฑ์ผ๋ก ๋ถ๋ฅธ๋ค.
Model ์์ฑ ๊ธฐ๋ณธ ํจํด
- DB Table ํด๋์ค ์์ฑํ๊ธฐ.
- migrations & migrate
- instance ์์ฑํ๊ธฐ(row ์ถ๊ฐํ๊ธฐ)
- db ์ ์ ๊ทผํด์ ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
- admin ์ ์ถ๊ฐ ํ๊ธฐ
1. DB Table ํด๋์ค ์์ฑํ๊ธฐ
1.1 Skelton code
from django.db import models
# Create your models here.
class ๋ชจ๋ธ์ด๋ฆ(models.Model):
# 1. django ์์ ์ ๊ณตํ๋ models.field ์์ ์๋ง์ ํ๋ ์ถ๊ฐํ๊ธฐ ๋ฐ column ์ด๋ฆ ์ง์ ํ๊ธฐ
์ค์ column์ด๋ฆ1 = models.ํ๋()
์ค์ column์ด๋ฆ2 = models.ํ๋()
# 2. ํจ์ ํํ์ column ์ง์ ์์ฑํ๊ธฐ
def ์ค์ column์ด๋ฆ3(self):
return value
# 3. db instance ์ถ๋ ฅ ๊ตฌ๋ฌธ ์ง์ ํ๊ธฐ
def __str__(self):
return self.question_text
(โ ๏ธ ๋ชจ๋ Database Table ์๋ Primary Key ๊ฐ ์์ฑ๋๋ค. ํน์ field ์ Primary Key ์ ์ง์ ํ์ง ์์ผ๋ฉฐ
์๋์ผ๋ก Primary Key ์ ์์ฑํ๋ค. Primary Key ๋ pk ๋ผ๋ ๋ช
๋ น์ด๋ก ์ ์ ๊ฐ๋ฅํ๋ค.
example)
# Create your models here.
class Question(models.Model):
# 1. django ์์ ์ ๊ณตํ๋ models.field ์์ ์๋ง์ ํ๋ ์ถ๊ฐํ๊ธฐ ๋ฐ column ์ด๋ฆ ์ง์ ํ๊ธฐ
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField(verbose_name='date published')
# 2. ํจ์ ํํ์ column ์ง์ ์์ฑํ๊ธฐ
def was_published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.pub_date <= now
# 3. db instance ์ถ๋ ฅ ๊ตฌ๋ฌธ ์ง์ ํ๊ธฐ
def __str__(self):
return self.question_text
2. migrations & migrate
python manage.py makemigrations
python manage.py migrate
3. instance ์์ฑํ๊ธฐ(row ์ถ๊ฐํ๊ธฐ)
def __name__ == '__main__':
Question.objects.create(question_text='hello')
4. admin ์ ์ถ๊ฐ ํ๊ธฐ
# ./mysite/polls/admin.py
admin.site.register(Choice)