4. ๋ชจ๋ธ + ์ฅ๊ณ ์ฑ migrate + ๋ชจ๋ธ ์์ฑ + ํ ์ด๋ธ ์์ฑ + Question & Answer ์์ฑ, ์์ , ์ญ์
# ๋ชจ๋ธ
: ์ฅ๊ณ ๋ ๋ชจ๋ธ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฒ๋ฆฌํจ. ์ฅ๊ณ ์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉด SQL ์ฟผ๋ฆฌ๋ฌธ(๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ์กฐํํ๊ธฐ ์ํด ์ฌ์ฉ)์ ์ฌ์ฉํ์ง ์์๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
# ํ์ด๋ณด์ ๋ชจ๋ธ
- ํ์ด๋ณด
: ์ง๋ฌธ, ๋ต๋ณ์ ํ ์ ์๋ ํ์ด์ฌ ๊ฒ์ํ ์๋น์ค๋ก, ์ง๋ฌธ๊ณผ ๋ต๋ณ์ ํด๋นํ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ์์ด์ผ ํจ
- ๋ชจ๋ธ์ ์์ฑ (์ต์ ์๋ 3๊ฐ๋ ๊ฐ์ง๊ณ ์์ด์ผ ํจ)
Question ๋ชจ๋ธ | Answer ๋ชจ๋ธ |
- subject : ์ง๋ฌธ ์ ๋ชฉ - content : ์ง๋ฌธ ๋ด์ฉ - create_date : ์ง๋ฌธ ์์ฑ ์๊ฐ |
- question : ์ด๋ค ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ธ์ง - content : ๋ต๋ณ ๋ด์ฉ - create_date : ๋ต๋ณ ์์ฑ ์ผ์ |
# ๋ชจ๋ธ ์์ฑ๊ณผ ํ ์ด๋ธ ์์ฑ
1. ์ง๋ฌธ, ๋ต๋ณ ๋ชจ๋ธ์ pybo/models.pyํ์ผ์ ์๋์ ๊ฐ์ด ์ ์ํ๋ค.
- max_length=200 : ์ ๋ชฉ ์ต๋ ๊ธ์๋ 200์
- ๊ธ์์ ๊ธธ์ด๊ฐ ์ ํ๋ ํ ์คํธ --> CharField ์ฌ์ฉ
๊ธ์์ ๊ธธ์ด๊ฐ ์ ํ๋์ง ์์ ํ ์คํธ --> TextField ์ฌ์ฉ
์๊ฐ, ๋ ์ง์ ๊ด๋ จ๋ ์์ฑ --> DateTimeField ์ฌ์ฉ
- ๊ธฐ์กด ๋ชจ๋ธ์ ์์ฑ์ผ๋ก ๋ค๋ฅธ ๋ชจ๋ธ๊ณผ ์ฐ๊ฒฐํ๋ ค๋ฉด ForeignKey ์ฌ์ฉ
- on_delete=models.CASCADE --> ๋ต๋ณ๊ณผ ๊ด๋ จ๋ ์ง๋ฌธ ์ญ์ ์ ๋ต๋ณ๋ ๊ฐ์ด ์ญ์
2. pybo ์ฑ์ config/settings.pyํ์ผ์ INSTALLED_APPS ํญ๋ชฉ์ ์ถ๊ฐํ๋ค.
+ INSTALLED_APPS์ ์ถ๊ฐํ pybo.apps.PyboConfig ํด๋์ค๋ pybo/apps.py ํ์ผ์ ์๋ ํด๋ผ์ค์ด๊ณ , ์ด ํ์ผ์ pybo์ฑ์ด ์์ฑ๋ ๋ ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ค.
--> ๋ฐ๋ผ์ ํ์ผ์ ๋ฐ๋ก ์์ฑํ ํ์ ์์ด ์ด๋ฏธ pybo/apps.pyํ์ผ ์์ ์๋์ ๊ฐ์ ํด๋์ค๊ฐ ๊ตฌํ๋์ด ์๋ค.
3. ํ ์ด๋ธ ์์ฑ์ ์ํด ์๋์ ๊ฐ์ด migrate ๋ช ๋ น์ ์ํํ๋ค.
+ ์ ์ฌ์ง์ ๊ฒฝ์ฐ migrate๊ฐ ์ ์์ ์ผ๋ก ์ํ๋์ง ๋ชปํ๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ชจ๋ธ์ด ๋ณ๊ฒฝ, ํน์ ์๋ก ๋ง๋ค์ด์ง๋ ๊ฒฝ์ฐ์๋ makemigrations ๋ช ๋ น์ ๋จผ์ ์ํํ๊ณ migrate ๋ช ๋ น์ ์ํํด์ผ ํ๋ค.
+ ์๋ ์ฌ์ง์ฒ๋ผ python manage.py makemigrations๋ช ๋ น์ ์ํํ๋ฉด pybo\migrations\0001_initial.py ๋ผ๋ ํ์ด์ฌ ํ์ผ์ด ์๋์ผ๋ก ์์ฑ๋๋ค.
+ ์ ๋ฆฌํ์๋ฉด makemigrations ๋ช ๋ น์ ์ฅ๊ณ ๊ฐ ํ ์ด๋ธ ์์ ์ ์ํํ๋๋ฐ ํ์ํ ์์ ํ์ผ(ex. 0001_initial.py)์ ๋ง๋๋ ๋ช ๋ น์ด๊ณ , migrate ๋ช ๋ น์ ์ค์ ํ ์ด๋ธ ์์ ์ ํ๋๋ฐ ์ฌ์ฉํ๋ ๋ช ๋ น์ด์ด๋ค.
4. ์์ ์์ ์ ๊ฑฐ์น๊ณ migrate ๋ช ๋ น์ด ์คํ๋๊ธฐ ์ ์ค์ ๋ก ์ด๋ค ์ฟผ๋ฆฌ๋ฌธ์ด ์ค์๋๋์ง sqlmigrate ๋ช ๋ น์ผ๋ก ํ์ธํ๋ค.
: ์ด๋ sqlmigrate ๋ช ๋ น์ ์คํ๋๋ ์ฟผ๋ฆฌ๋ฅผ '์กฐํ'๋ง ํ ์ ์๋ค. ์ค์ ์ฟผ๋ฆฌ๊ฐ ์ํ๋๋ ๊ฒ์ X
+ ๋งจ ์์ python manage.py sqlmigrate pybo 0001 ๋ช ๋ น์์ pybo ๋ ์ฑ ์ด๋ฆ, 0001์ ์์ฑ๋ ์์ ํ์ผ์ ์ผ๋ จ๋ฒํธ์ด๋ค.
5. migrate ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ค์ ๋ก ํ ์ด๋ธ์ ๋ง๋ค์ด๋ณด๊ธฐ
# ๋ชจ๋ธ ์ฌ์ฉํ์ฌ Question ๋ง๋ค๊ธฐ + id ํ์ธ
1. ๋ชจ๋ธ ์ฌ์ฉ๋ฒ์ ์ตํ๊ธฐ ์ํด python manage.py shell ๋ช ๋ น์ ์ ๋ ฅํ์ฌ ์ฅ๊ณ ์ ธ์ ์คํ์ํค๊ธฐ
+ ์ฃผ์!
์ผ๋ฐ ํ์ด์ฌ ์ ธ์ด ์๋ ์ฅ๊ณ ์ ธ์ ์คํํด์ผํจ
2. ์ฅ๊ณ ์ ธ์์ ์๋์ ๊ฐ์ด import ํ์ฌ Question, Ansewer ๋ชจ๋ธ ์ฌ์ฉํ ์ค๋นํ๊ธฐ
3. Question ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ์ฒซ ๋ฒ์งธ ์ง๋ฌธ ๋ฐ์ดํฐ ๋ง๋ค๊ธฐ
+ Question ๋ชจ๋ธ์ create_data ์์ฑ์ DataTimeFied ํ์ ์ผ๋ก, timezone.now()์ผ๋ก ํ์ฌ ์๊ฐ์ ๋์ ํ์๋ค.
+ ์์ ๊ฐ์ด Question ๋ชจ๋ธ์ ๊ฐ์ฒด q๋ฅผ ์์ฑํ๊ณ save ํจ์๋ฅผ ์คํํ๋ฉด ์ง๋ฌธ ๋ฐ์ดํฐ๊ฐ 1๊ฑด ์์ฑ๋๋ค. --> ๋ฐ์ดํฐ๊ฐ 1๊ฑด ์์ฑ๋๋ฉด ๊ผญ ์๋์ ๊ฐ์ด id ๊ฐ์ด ์์ฑ๋จ.
+ id : ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ๋๋ง๋ค 1์ฉ ์ฆ๊ฐ๋๋ ๋ชจ๋ธ ๋ฐ์ดํฐ์ ์ ์ผํ ๊ฐ์ด๋ฉฐ, ํ๋ผ์ด๋จธ๋ฆฌ ํค(PK = Primary Key)๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
4. Question ๋ชจ๋ธ์ ์ด์ฉํ์ฌ ๋ ๋ฒ์งธ ์ง๋ฌธ์ ๋ง๋ค์ด ๋ ๋ฒ์งธ ์ง๋ฌธ์ id๋ฅผ ํ์ธํ๋ค.
# Question ์กฐํ
1. Question.objects ๋ช ๋ น์ ํตํด ์ ์ฅํ Question ๋ชจ๋ธ์ ๋ฐ์ดํฐ ์กฐํํ๊ธฐ
+ Question.objects.all() ํจ์ --> ๋ชจ๋ Question ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ํจ์๋ก, ๊ฒฐ๊ณผ๊ฐ์ผ๋ก Question ๊ฐ์ฒด๋ฅผ ํฌํจํ๊ณ ์๋ QuerySet ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
+ Question object (1), Question object (2) ์์ 1, 2๋ Question ๋ฐ์ดํฐ์ id ๊ฐ
2. id ๊ฐ ๋์ ์ ๋ชฉ์ ํ์ํ๊ธฐ ์ํด ์๋์ ๊ฐ์ด ํ์ด์ฐธ์์ Question ๋ชจ๋ธ์ __str__ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ค.
+ ๋ชจ๋ธ์ ๋ฉ์๋๊ฐ ์ถ๊ฐ๋ ๊ฒฝ์ฐ์๋ makemigrations, migrate๊ฐ ํ์ X --> ์๋ค ๋์ ๋ชจ๋ธ ์์ฑ์ด ๋ณ๊ฒฝ๋ฌ์ ๋๋ง ์ฌ์ฉ
3. ์ฅ๊ณ ์ ธ์ ์ฌ์์ํ๊ณ , Question.objects.all() ํจ์๋ฅผ ๋ค์ ์คํํ๋ค.
+ ์ฅ๊ณ ์ ธ ์ฌ์์ ๋ฒํผ : ๋ช ๋ น ํ๋กฌํฌํธ์ quit() ์ ๋ ฅ OR Ctrl+z
4. filter, get ์ ์ฌ์ฉํ์ฌ id๊ฐ์ด 1์ธ Question ๋ฐ์ดํฐ ์กฐํํ๊ธฐ
filter | get |
# ์กฐ๊ฑด์ ํด๋น๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ฆฌํด => ๋ค๊ฑด ๋ฆฌํด # ๋ค๊ฑด์ ์๋ฏธํ๋ QuerySet ์ ๋ฆฌํด |
# ํ๊ฑด๋ง ๋ฆฌํด => ๋ฐ๋์ 1๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ์ฌ์ฉ + id ๊ฐ์ ์ ์ผ๊ฐ์ผ๋ก ์กฐํํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ # Question ๋ชจ๋ธ ๊ฐ์ฒด๋ง ๋ฆฌํด |
+ ์ฃผ์!
get์ผ๋ก ์กฐํ ์ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
5. ์๋์ ๊ฐ์ด subject ์ "์ฅ๊ณ "๋ผ๋ ๋ฌธ์์ด์ด ํฌํจ๋ ๋ฐ์ดํฐ๋ง ์กฐํํด๋ณด๊ธฐ
+ subject__contains='์ฅ๊ณ ' --> "subject์ '์ฅ๊ณ '๋ผ๋ ๋ฌธ์์ด์ด ์๋๊ฐ?"
# Question ์์
- id ๊ฐ์ด 2์ธ ๋ฐ์ดํฐ๋ฅผ ์กฐํ ํ subject ์์ฑ์ ์๋์ฒ๋ผ ์์
# Question ์ญ์
- id ๊ฐ์ด 1์ธ Question ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ Question.objects.all() ๋ก ์ญ์ ์ฌ๋ถ ํ์ธ
+ (1, { ' pybo.Question ' : 1 }) --> Question ๋ชจ๋ธ์ด 1๊ฐ ์ญ์ ๋์์์ ์๋ฏธ
# Answer ์์ฑ ๋ฐ ์กฐํ
1. id๊ฐ 2์ธ ์ง๋ฌธ์ ์กฐํํ๊ณ question ์์ฑ์ ๋์ --> ๋ต๋ณ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค๋ ค๋ฉด ์ง๋ฌธ์ด ํ์ํ๊ธฐ ๋๋ฌธ
+ Answer ๋ชจ๋ธ๋ Question ๋ชจ๋ธ์ฒ๋ผ id ๊ฐ ์๋์ผ๋ก ์์ฑ๋จ ( a.id ๊ฐ 1 )
2. Answer์ id๊ฐ์ ์ด์ฉํ์ฌ ๋ต๋ณ ์กฐํํ๊ธฐ
+ Answer ๊ฐ์ฒด์ธ a๋ฅผ ์ด์ฉํ๋ฉด ์๋์ฒ๋ผ ๋ต๋ณ๊ณผ ๊ด๋ จ๋ ์ง๋ฌธ ์กฐํ๋ ๊ฐ๋ฅ (๋ต๋ณ ์ด์ฉํ์ฌ ์ง๋ฌธ ์ฐพ๊ธฐ)
# ์ง๋ฌธ ์ด์ฉํ์ฌ ๋ต๋ณ ์ฐพ๊ธฐ์ ์ฐ๊ฒฐ๋ชจ๋ธ๋ช _set
- q.answer_set ์ ์ฌ์ฉํ์ฌ ์ง๋ฌธ์ ๊ด๋ จ๋ ๋ต๋ณ์ ์ฐพ์๋ผ ์ ์์
: Question ๋ชจ๋ธ์๋ answer_set ์์ฑ์ด ์์ง๋ง, Answer ๋ชจ๋ธ์ Question ๋ชจ๋ธ์ด ForignKey ๋ก ์ฐ๊ฒฐ๋์ด ์์ด ์ญ๋ฐฉํฅ ์ ๊ทผ ๊ฐ๋ฅ
- ์ฐ๊ฒฐ๋ชจ๋ธ๋ช _set ( ex. answer_set )
- Question ๋ชจ๋ธ์๋ ์ answer_set ์์ฑ์ด ์์๊น?
: ์ง๋ฌธ ํ๋์ ์ฌ๋ฌ๊ฐ์ ๋ต๋ณ์ด ๋ฌ๋ฆด ์๋ ์์ผ๋(q.answer_set ๊ฐ๋ฅ), ๋ต๋ณ ํ๋์ ์ฌ๋ฌ ์ง๋ฌธ์ด ๋ฌ๋ฆด ์ ์๊ธฐ ๋๋ฌธ(a.question_set ๋ถ๊ฐ๋ฅ).
# ์ฅ๊ณ ์ฑ migrate
1. ๋ช ๋ น ํ๋กฌํฌํธ์์ python manage.py runserver ์ ์คํํ๋ค.
+ 18๊ฐ์ ๋ฏธ์ ์ฉ๋ migration์ด ์๊ณ , admin, auth, contenttypes, sessions ์ฑ๋ค๊ณผ ๊ด๋ จ์ด ์์ผ๋ฉฐ ์ ์ฉ์ ์ํด์๋ python manage.py migrate ๋ฅผ ์คํํด์ผ ํ๋ค๊ณ ํจ.
+ admin, auth, contenttypes, sessions ์ฑ๋ค์ ์ฅ๊ณ ํ๋ก์ ํธ๊ฐ ์์ฑ๋ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋๋ค.
2. ์ค์น๋์ด์๋ ์ฑ์ ํ์ด์ฐธ์ config/settings.py ํ์ผ์์ ํ์ธ
+ admin, auth, contenttypes, sessions ๊ณผ๋ ๋ฌ๋ฆฌ messages, staticfiles ์ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌด๊ดํ์ฌ 2๋ฒ์ ์ถ๋ ฅ๋์ง ์์
3. ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด๋ฅผ config/settings.py ํ์ผ์์ ํ์ธ
+ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ์ BASE_DIR(=ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ) ๋๋ ํฐ๋ฆฌ ๋ฐ db.sqlite3 ํ์ผ์ ์ ์ฅ
+ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ django.db.backends.sqlite3 ๋ผ๊ณ ์ ์
SQLite ๋...? |
๊ฐ๋ฐ์ด๋ ์๊ท๋ชจ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋๋ ๊ฐ๋ฒผ์ด ํ์ผ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค |
+ ๋ด ํ๋ก์ ํธ์ BASE_DIR์ C:\projects\mysite
4. ๋ช ๋ น ํ๋กฌํฌํธ์์ python manage.py migrate ๋ช ๋ น ์คํ
'โ๏ธ Python Programming > Frameworks' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
< django - 6 > (0) | 2022.07.30 |
---|---|
< django - 5 > (0) | 2022.07.30 |
< django - 3 > (0) | 2022.07.28 |
< django - 2 > (0) | 2022.07.27 |
[Django] 1. ํ์ด์ฌ ๊ฐ์ ํ๊ฒฝ & ์ฅ๊ณ ๊ฐ๋ฐ ํ๊ฒฝ ์ค๋น (0) | 2022.07.27 |