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 ์šฉ์–ด:

  1. Table
  2. feature, entry, field, column
  3. instance, record, row
  4. db : db ๋Š” ์—ฌ๋Ÿฌ table ์ •๋ณด๋ฅผ ๊ฐ€์งˆ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํŒŒ์ผ์ด๋‹ค.
    ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ํ…์ŠคํŠธ ํŒŒ์ผ์€ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํŒŒ์ผ์ด์ง€ ์•Š๋Š”๊ฐ€?
    db๋„ ๊ฐ™์€ ๊ฐœ๋…์ด๋‹ค ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ๋‹ด๊ณ  ์žˆ๋Š” ํŒŒ์ผ์ด๋‹ค.
  1. entity, attributes ์—”ํ‹ฐํ‹ฐ entity ๋Š” ํ˜„์‹ค ์„ธ๊ณ„์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์—์„œ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.
    ์—”ํ‹ฐํ‹ฐ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ํŠน์„ฑ์„ Attribute๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ๋“ค์€ ๊ฐ๊ฐ์˜ ์—”ํ‹ฐํ‹ฐ๋งˆ๋‹ค ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ถ”์ƒ์  ๊ฐœ๋…์ด ๋ญ๋ƒ๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค. ์‚ฌ๋žŒ์ด ์žˆ๋‹ค. ์‚ฌ๋žŒ์˜ ํŠน์ง•(attribute) ์ค‘์— ๋ˆˆ ์ฝ” ์ž… ๊ฐœ์ˆ˜๋ฅผ ๊ธฐ๋กํ•˜๊ธธ ์›ํ•œ๋‹ค๊ณ  ์น˜์ž.

์šฐ๋ฆฌ๊ฐ€ ๊ด€์ฐฐํ•  ๋Œ€์ƒ ์ž์ฒด๋ฅผ entity ๋ผ๊ณ  ํ•œ๋‹ค. entity ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํŠน์„ฑ๋“ค์„ attribute ๋ผ๊ณ  ํ•œ๋‹ค.

๊ด€์ฐฐํ•œ ํŠน์ง•๋“ค์„ db ํ™” ํ–ˆ๋‹ค๋ฉด ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ๋“ค์„ record, instance ๋“ฑ์œผ๋กœ ๋ถ€๋ฅธ๋‹ค.

Model ์ƒ์„ฑ ๊ธฐ๋ณธ ํŒจํ„ด

  1. DB Table ํด๋ž˜์Šค ์ƒ์„ฑํ•˜๊ธฐ.
  2. migrations & migrate
  3. instance ์ƒ์„ฑํ•˜๊ธฐ(row ์ถ”๊ฐ€ํ•˜๊ธฐ)
  4. db ์— ์ ‘๊ทผํ•ด์„œ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
  5. 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)

Reference

  1. custom field ์ƒ์„ฑ ๋ฐฉ๋ฒ•(django)(official)
  2. model fields(official)