โ ํด๋์ค์ ์์์ด๋?
๋ถ๋ชจ์ ๊ฒ์ ์์์๊ฒ ๋ฌผ๋ ค์ฃผ๋ ๊ฒ์ฒ๋ผ ๋ถ๋ชจ ํด๋์ค(์์ ํด๋์ค)์ ์์ ํด๋์ค(ํ์ ํด๋์ค)๊ฐ ์กด์ฌํ ๋ ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์ ํํด์ ๊ทธ ๋ถ๋ชจ ํด๋์ค์ ๋ฉค๋ฒ๋ฅผ ์์๋ฐ์ ๊ทธ๋๋ก ์ธ ์ ์๊ฒ ๋๋ค.
์๋์ ๊ฐ์ด class A์ class B๊ฐ ์์๋ ์๋ก ๋ค๋ฅธ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ๊ฐ ํด๋์ค๋ ์๋ก์๊ฒ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
class A:
def ๊ธฐ๋ฅ_A_1:
return '๊ธฐ๋ฅ_A_1'
def ๊ธฐ๋ฅ_A_2:
return '๊ธฐ๋ฅ_A_2'
class B:
def ๊ธฐ๋ฅ_B_1:
return '๊ธฐ๋ฅ_B_1'
ํ์ง๋ง ์๋์ ์ฝ๋๋ฅผ ๋ณด๋ฉด Bํด๋์ค๊ฐ ํจ์์ฒ๋ผ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง ๋ฏ ๋ณด์ด๋๋ฐ, ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด class B์์ class A์ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉ ํ ์์๋ค
class B(A):
def ๊ธฐ๋ฅ_B_1:
return '๊ธฐ๋ฅ_B_1'
๐งฉ ์ ์ฉ ์์
# user/models.py
from django.db import models
# ํ์๊ฐ์
์์ ์ ์ฅ๋๋ class
# Create your models here.
class UserModel(models.Model):
class Meta:
db_table = "my_user" # ์ฌ๊ธฐ๋ ํ
์ด๋ธ ์ด๋ฆ์ด์์! ๊ผญ ๊ธฐ์ต ํด ์ฃผ์ธ์!
username = models.CharField(max_length=20, null=False)
password = models.CharField(max_length=256, null=False)
bio = models.CharField(max_length=256, default='')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
์์์ ์ง์ ์์ฑํ ๊ธฐ๋ฅ๋ค์ Django์์ ์ ๊ณตํ๊ณ ์๋ค. models.Model ์๋ฆฌ์ 'AbstractUser'๋ฅผ ์ฌ์ฉ ํ์ฌ ์๋์ ๊ฐ์ด ๋ฐ๊พธ์ด์ค ์ ์๋ค.
โ AbstractUser ๋?
django์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ๋ก๊ทธ์ธ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด์ User Model์ ๋ฐ์ดํฐ๋ค์ ์์ ํ ์ ์๊ฒํ๋ค. ์ด ์ธ์๋ django์๋ flask์ ๋ฌ๋ฆฌ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ๋ง์ ๊ธฐ๋ฅ๋ค์ด ์๋ค.
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserModel(AbstractUser):
class Meta:
db_table = "my_user" # ์ฌ๊ธฐ๋ ํ
์ด๋ธ ์ด๋ฆ์ด์์! ๊ผญ ๊ธฐ์ต ํด ์ฃผ์ธ์!
bio = models.TextField(max_length=500, blank=True)
๐งฉ ์ ์ฉ ์์
1) one-to-many
ex) ํ ๋ช
์ ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ๊ฐ์ ๊ธ์ ์ฐ๊ฑฐ๋ ํ๋์ ๊ธ์ด์ด๊ฐ ์ฌ๋ฌ ๊ฐ์ ๊ธ์ ๊ฐ์ง๊ณ ์์ ์ ์์
2) one-to-one
๋ฐ์ดํฐ 'A'์ '๋ฐ์ดํฐ B'๊ฐ ์๋ก ๋ง๋์ ์ค๋ณต์ด ๋์ง ์๋ ๊ฐ์ ๋ง๋ค์ด ๋ด๋ ๊ฒ
ex) Profile์ ํ ์ฌ์ฉ์ ๋น ํ๋๋ง ์กด์ฌํจ
3) many-to-many
์๋ก์ ํ
์ด๋ธ์์' ์๋ก์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ ์ฌ ์ ์๋ ๊ฒ์ด ํน์ง์ด๋ค.
ex) 'ํผ์' ๋ ์ฌ๋ฌ ๊ฐ์ ํ ํ์/'ํ ํ'์ ์ฌ๋ฌ๊ฐ์ ํผ์์ ์ฌ๋ผ ๊ฐ ์ ์์ . ํ๋ก์ฐ-ํ๋ก์๊ด๊ณ
์ค๋์ django์ ๊ด๋ จํด์ ํํฐ๋๊ณผ ์๋ด์ ์ค๋ซ๋์ ์งํํ๋ค. ์ง๊ธ ๋น์ฅ์ django๊ฐ ์ดํด๋ ์ ์๋๊ณ python์ธ์ด๋ ์ด๋ ต๊ฒ ๋๊ปด์ ธ์ ์ข์ ํ ์๋ ์๊ฒ ์ง๋ง, ๋์ค์๊ฐ์๋ ๋ณ๊ฒ๋ ์๋๊ฑธ๋ก ์ด๋ ค์ํ๊ตฌ๋๋ผ๊ณ ๊นจ๋ฌ์ ์ ์์ ๊ฑฐ๋ผ๋ ์กฐ์ธ์ ํด์ฃผ์ จ๋ค. ๋ญ๋ ์ฒ์ ๋ฐฐ์ฐ๊ฒ๋๋ฉด ์ด๋ ต๊ฒ ๋๊ปด์ง๋ ๊ฒ์ด ๋น์ฐํ ๊ฒ์ด๊ณ ๋ ธ๋ ฅํ๋ฉด ๋์ค์๋ ์ ํ์ฉํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ํด์ฃผ์ ์ ์์ ๊ฐ์ด ์๊ฒผ๋ค. django๋ฅผ ๊ณ์ ๊ณต๋ถํ๋ฉด์ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ๋ง์ด ๊ณต๋ถํ๋ฉด์ python์ธ์ด๋ ์์ฐ์ค๋ฝ๊ฒ ๊ณต๋ถํ๊ฒ ๋ ๊ฒ์ด๋ค. ๋ญ๊ฐ ๋นจ๋ฆฌ ์ต๋ํด์ผ๋๋ค๋ ์๊ฐ์ด ๊ฐํด์ ์ด์กฐํดํ๋ฉด์ ๊ณต๋ถ๋ฅผ ํ์๋๋ฐ, ๊พธ์คํ ๊ณต๋ถํ๋๊ฒ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋ค์ํ๋ฒ ๊นจ๋ฌ์๋ค. ์์ผ๋ก๋ ๊ณ์ ํ์ด์ค๋ฅผ ์ ์งํ๋ฉด์ ๊พธ์คํ ๊ณต๋ถํด์ผ๊ฒ ๋ค!!
๐ ์์ธํ ์ฝ๋๋ Moonmoo ์ ๊ฒ์ํ์ต๋๋ค