21. ์ง๋ฌธ๊ณผ ๋ต๋ณ ์ถ์ฒ
# Question ๋ชจ๋ธ๊ณผ voter ์์ฑ
1. projects\mysite\pybo\models.py ํ์ผ์ ์ด์ด Question ๋ชจ๋ธ์ ์ถ์ฒ์ธ(voter) ์์ฑ ์ถ๊ฐ
+ Line 11์ ManyToManyField
: ๋ค๋๋ค(N:N) ๊ด๊ณ --> ํ๋์ ์ง๋ฌธ์ ์ฌ๋ฌ๋ช ์ด ์ถ์ฒํ ์ ์๊ณ ํ ๋ช ์ด ์ฌ๋ฌ ๊ฐ์ ์ง๋ฌธ์ ์ถ์ฒํ ์ ์๋ ์์คํ ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ
2. ๋ช ๋ น ํ๋กฌํฌํธ์์ makemigrations ๋ช ๋ น ์คํ --> ์ค๋ฅ ๋ฐ์
+ User ๋ชจ๋ธ์ ํตํด์ Question ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ฒฝ์ฐ, author์ voter ์ค ์ด๋ ๊ฒ์ ๊ธฐ์ค์ผ๋ก ํด์ผ ํ ์ง ๋ช ํํ์ง ์๋ค๋ ์ค๋ฅ --> Question ๋ชจ๋ธ์์ ์ฌ์ฉํ author, voter๊ฐ ๋ชจ๋ User ๋ชจ๋ธ๊ณผ ์ฐ๊ฒฐ๋์ด์์ด ๋ฐ์ํ ์ค๋ฅ์
3. ์ค๋ฅ ํด๊ฒฐ์ ์ํด projects\mysite\pybo\models.py ํ์ผ์ ์ด์ด Question ๋ชจ๋ธ์ related_name ์ธ์ ์ถ๊ฐ
+ << Line 6 >>
: author์ related_name='author_question' ์ธ์ ์ง์ --> ํน์ ์ฌ์ฉ์๊ฐ ์์ฑํ ์ง๋ฌธ์ ์ป๊ธฐ ์ํด some_user.author_question.all() ์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ฒ ํ๊ธฐ ์ํจ
+ << Line 11 >>
: voter์ related_name='voter_question' ์ธ์ ์ง์ --> ํน์ ์ฌ์ฉ์๊ฐ ์ถ์ฒํ ์ง๋ฌธ์ ์ป๊ธฐ ์ํด some_user.voter_question.all() ์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ฒ ํ๊ธฐ ์ํจ
+ some_user --> ํน์ ์ฌ์ฉ์๋ฅผ ์๋ฏธ
4. projects\mysite\pybo\models.py ํ์ผ์ ์ด์ด Answer ๋ชจ๋ธ์์ ์ถ์ฒ์ธ(voter) ์์ฑ ์ถ๊ฐ
5. ๋ช ๋ น ํ๋กฌํฌํธ์์ makemigrations, migrate ๋ช ๋ น๋ค์ ์คํ
# ์ง๋ฌธ ์ถ์ฒ
1. projects\mysite\templates\pybo\question_detail.html ํ์ผ์ ์ด์ด ์ง๋ฌธ ์์ธ ํ ํ๋ฆฟ์ ์๋์ ๊ฐ์ด ์์
+ ์ง๋ฌธ์ ์ถ์ฒ ๋ฒํผ์ ์ง๋ฌธ์ ์์ ๋ฒํผ ์ข์ธก์ ์ถ๊ฐํ๊ณ , ๋ฒํผ์ ์ถ์ฒ ์๋ฅผ ํจ๊ป ํ์ํ๋๋ก ์ค์
+ << Line 30 >>
: class ์์ฑ์ "recommend"๋ฅผ ์ถ๊ฐํ์ฌ ์๋ฐ์คํฌ๋ฆฝ๋ก data-uri์ ์ ์๋ URL์ด ํธ์ถ๋๋ ๋ฐฉ์ ์ฌ์ฉ --> "์ถ์ฒ" ๋ฒํผ์ ๋๋ ์๋ ํ์ธ์ฐฝ์ ํตํด ์ฌ์ฉ์์ ํ์ธ์ ๊ตฌํ๊ธฐ ์ํจ
2. <์ถ์ฒ> ๋ฒํผ์ ํด๋ฆญํ์ ๋ '์ ๋ง๋ก ์ถ์ฒํ์๊ฒ ์ต๋๊น?'๋ผ๋ ํ์ธ ์ฐฝ์ ์ถ๋ ฅํ๊ธฐ ์ํด projects\mysite\templates\pybo\question_detail.html ํ์ผ์ ์ด์ด ์๋์ ๊ฐ์ ์ฝ๋ ์ถ๊ฐ
+ ์ถ์ฒ ๋ฒํผ์ class="recommend"๊ฐ ์ ์ฉ๋จ --> ์ถ์ฒ ๋ฒํผ ํด๋ฆญ --> "์ ๋ง๋ก ์ถ์ฒํ์๊ฒ ์ต๋๊น?" ์ถ๋ ฅ --> "ํ์ธ" ์ ํ --> data-uri ์์ฑ์ ์ ์ํ URL ํธ์ถ
3. ์์ ์ฌ์ง๊ณผ ๊ฐ์ด {% url 'pybo:question_vote' question.id %} URL์ด ์ถ๊ฐ๋์์ผ๋ projects\mysite\pybo\urls.py ํ์ผ์ ์ด์ด ์๋์ ๊ฐ์ด URL ๋งคํ ๊ท์น ์ถ๊ฐ
4. projects\mysite\pybo\views\question_views.py ํ์ผ์ ์ด๊ณ URL๋งคํ์ ์ํด ์คํ๋๋ question_vote ํจ์๋ฅผ ์๋์ ๊ฐ์ด ์์ฑ
+ << Line 57, 58 >>
: ๋ณธ์ธ ์ถ์ฒ์ ๋ง๊ธฐ ์ํด "๋ก๊ทธ์ธ ์ํ์ธ ์ฌ์ฉ์ = ๊ธ์ด์ด"์ธ ๊ฒฝ์ฐ์๋ ์ถ์ฒ์ ํ ์ ์๊ฒ ํจ
+ << Line 60 >>
: add ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ถ์ฒ์ธ ์ถ๊ฐ --> Question ๋ชจ๋ธ์ voter๋ ์ฌ๋ฌ์ฌ๋์ ์ถ๊ฐํ ์ ์๋ ManyToManyField ์ด๊ธฐ ๋๋ฌธ
5. http://localhost:8000/pybo/ ํ์ด์ง ํธ์ถ --> ์ถ์ฒ ๋ฒํผ ํ์ธ ๊ฐ๋ฅ + ๋ณธ์ธ์ด ์ด ์ง๋ฌธ์ ์ถ์ฒํ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฐ์ ํ์ธ ๊ฐ๋ฅ
# ๋ต๋ณ ์ถ์ฒ
1. projects\mysite\templates\pybo\question_detail.html ํ์ผ์ ์ด์ด ๋ต๋ณ์ ์ถ์ฒ์๋ฅผ ํ์ํ๊ณ ๋ต๋ณ์ ์ถ์ฒํ ์ ์๋ ๋ฒํผ์ ์ง๋ฌธ ์์ธ ํ ํ๋ฆฟ์ ์ถ๊ฐ
2. ์์ ์ฌ์ง์์ {% url 'pybo:answer_vote' answer.id %}์ด ์ถ๊ฐ๋์์ผ๋ฏ๋ก projects\mysite\pybo\urls.py ํ์ผ์ ์ด์ด ์๋์ฒ๋ผ URL ๋งคํ ๊ท์น ์ถ๊ฐ
3. projects/mysite/pybo/views/answer_views.py ํ์ผ์ ์ด์ด URL ๋งคํ์ ์ํด ์คํ๋๋ answer_vote ํจ์๋ฅผ ์๋์ฒ๋ผ ์์ฑ
4. http://localhost:8000/pybo/ ํ์ด์ง ํธ์ถ --> ๋ต๋ณ ์ถ์ฒ ๋ฒํผ ๋ฐ ๋ต๋ณ ์ถ์ฒ ๊ธฐ๋ฅ ํ์ธ ๊ฐ๋ฅ
'โ๏ธ Python Programming > Frameworks' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
< django - 23 > (0) | 2022.08.25 |
---|---|
< django - 22 > (0) | 2022.08.23 |
< django - 20 > (0) | 2022.08.17 |
< django - 19 > (0) | 2022.08.15 |
< django - 18 > (0) | 2022.08.07 |