Django-model.md
Python์ Web framework์ธ Django์์๋ ORM์ ๊ธฐ๋ณธ ์ ๊ณตํ๋ค. ์ด๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด app ๋๋ ํ ๋ฆฌ์ models.py์ class ํํ๋ก ํ ์ด๋ธ์ ์ ์ํ์ฌ ์ฌ์ฉํ๋ค.
model ์ ์
models.py
django.db๋ชจ๋์ Model.models๋ฅผ ์์๋ฐ์ ๊ธฐ๋ณธ ๋ชจ๋ธ์ ํ์ ๋ง๋ ๋ค.
class์ ์ด๋ฆ์ผ๋ก ๋ง๋ค์ด์ง Table์ ์ด๋ฆ์ ๋ช ์ํ๋ค.
django ORM๊ณผ ์ฐ๊ฒฐ๋ DB๋ settings.py์์ ์ค์ ํ๋ค.
django model์ ๋ง๋ค ๋ primary_key๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด id๋ผ๋ ์ด๋ฆ์ AutoField ํ๋๊ฐ primary_key๊ฐ ๋์ด ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ค.
Migration
migrate -> ์ด์ฃผํ๋ค
์ฆ, django ORM์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ด์ฃผ ์ํค๋ ๊ฒ
make migrations
: ์ฝ๋๋ก ์์ฑ๋ ๋ชจ๋ธ ๊ฐ์ฒด๊ฐ ์ฌ์ฉ๊ฐ๋ฅํ์ง ํ์ธํ๊ณ ์์ง ์กด์ฌํ์ง ํ ์ด๋ธ์ ๋ํ ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ ์์ฑ
Field types
auto_now: ํด๋น ๊ฐ์ฒด๊ฐ ์ ์ฅ๋ ๋(Model.save())์ ๋ ์ง๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธ ํ๋ค.
auto_now_add: ๊ฐ์ฒด๊ฐ ์ต์ด ์ ์ฅ(insert)์์ ๋ ์ง๋ฅผ ์๋์ผ๋ก ์ ์ฉํ๋ค.
CharField์ด์ง๋ง EmailValidator๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฉ์ผ์ ํ์์ ๊ฒ์ฌํ๋ค.
FileField์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์์๋ฐ๊ณ , height์ width ์์ฑ์ ๊ฐ์ง๋ค.
Integerfield๋ฅผ ์์๋ฐ๊ณ auto_increment๋ฅผ ์ ์ฉํ๋ ํ๋ํ์
Field name restrictions
Python ๋ด์ฅ ์์ฝ์ด ์ฌ์ฉ X
underscore(_) ๋๊ฐ ์ด์ ์ฌ์ฉ X
Foreign Key
1 : N ๊ด๊ณ
fk name์ ๋ณดํต ์ฐธ์กฐ๋๋ Table ๋ช ์ _id๊ฐ ๋ถ์ด ๋ง๋ค์ด์ง๋ค.
ForeignKey์ ๊ฐ์ NULL์ด๊ฑฐ๋ ๋ถ๋ชจํ ์ด๋ธ์ ๊ธฐ๋ณธํค ๊ฐ๊ณผ ๋์ผํด์ผ ํจ
์์ ๊ฐ์ด 2๊ฐ์ง์ ๋ฐฉ๋ฒ์ด ์๋๋ฐ, ์ฑ๋ผ๋ฆฌ ๋ชจ๋ธ๋ช ์ด ์ค๋ณต๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋์ ํ์์ ์ ํธํ๋ค.
on_delete
์ฐธ์กฐ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๊ธฐ์ํด ForeignKey๊ฐ ๋ฐ๋ผ๋ณด๋ ๊ฐ์ด ์ญ์ ๋ ๋์ ์ฒ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์ต์ ์ผ๋ก ์ง์ ํ๋ค.
CASCADE
ForeignKeyField๊ฐ ๋ฐ๋ผ๋ณด๋ ๊ฐ์ด ์ญ์ ๋ ๋ ํด๋น ForeignKeyField๋ฅผ ํฌํจํ๋ ๋ชจ๋ธ ์ธ์คํด์ค(row)๋ ์ญ์ ํ๋ค.
PROTECT
ForeignKeyField๊ฐ ๋ฐ๋ผ๋ณด๋ ๊ฐ์ด ์ญ์ ๋ ๋ ์ญ์ ๋์ง ์๋๋ก ProtectedError๋ฅผ ๋ฐ์์ํจ๋ค.
SET_NULL
ForeignKeyField๊ฐ ๋ฐ๋ผ๋ณด๋ ๊ฐ์ด ์ญ์ ๋ ๋ ํด๋น ForeignKeyField์ ๊ฐ์ null๋ก ๋ฐ๊พผ๋ค. (๋จ, null=True์ผ ๋๋ง ๊ฐ๋ฅ)
SET_DEFAULT
ForeignKeyField๊ฐ ๋ฐ๋ผ๋ณด๋ ๊ฐ์ด ์ญ์ ๋ ๋ ForeignKeyField๊ฐ์ default๊ฐ์ผ๋ก ๋ฐ๊พผ๋ค.(default๊ฐ์ด ์์ ๋๋ง ๊ฐ๋ฅ)
SET()
ForeignKeyField๊ฐ ๋ฐ๋ผ๋ณด๋ ๊ฐ์ด ์ญ์ ๋ ๋ SET์ ์ค์ ๋ ํจ์ ๊ฐ์ ์ํด ์ค์ ๋๋ค.
DO_NOTHING
ForeignKeyField๊ฐ ๋ฐ๋ผ๋ณด๋ ๊ฐ์ด ์ญ์ ๋ ๋ ์๋ฌด๋ฐ ํ๋์ ์ทจํ์ง ์๋๋ค. ์ฐธ์กฐ๋ฌด๊ฒฐ์ฑ์ ํด์น ์ํ์ด ์๋ค.
๐จ ๋ณตํฉํค (composite key)
Django์ ์ต๋ ๋จ์ ์ค ํ๋๋ค. django์ ORM์์๋ ๋ณตํฉํค๋ฅผ ์ง์ํ์ง ์๋๋ค!!
์ฌ๊ธฐ์ ๋ณตํฉํค๋, ํ๋์ ๋ฆด๋ ์ด์ ์์ ํ๋์ ์์ฑ์ผ๋ก ๊ธฐ๋ณธํค๊ฐ ๋ ์ ์๋ ๊ฒฝ์ฐ ๋ ์ด์์ ์ปฌ๋ผ์ ๋ฌถ์ด ์๋ณ์๋ก ์ง์ ํด์ฃผ๋ ๊ฒ์ ๋งํ๋ค.
Last updated