๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ’๏ธ Python Programming/Frameworks

< django - 21 >

by A Lim Han 2022. 8. 22.

21. ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€ ์ถ”์ฒœ

 

 

 

# Question ๋ชจ๋ธ๊ณผ voter ์†์„ฑ

1. projects\mysite\pybo\models.py ํŒŒ์ผ์„ ์—ด์–ด Question ๋ชจ๋ธ์— ์ถ”์ฒœ์ธ(voter) ์†์„ฑ ์ถ”๊ฐ€

Line 11 ์ถ”๊ฐ€

+ 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, 11 ์ˆ˜์ •

+ << 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) ์†์„ฑ ์ถ”๊ฐ€

Line 18 ์ˆ˜์ •, 23 ์ถ”๊ฐ€

 

 

 

5. ๋ช…๋ น ํ”„๋กฌํฌํŠธ์—์„œ makemigrations, migrate ๋ช…๋ น๋“ค์„ ์‹คํ–‰

 

 

 

 

# ์งˆ๋ฌธ ์ถ”์ฒœ

1. projects\mysite\templates\pybo\question_detail.html ํŒŒ์ผ์„ ์—ด์–ด ์งˆ๋ฌธ ์ƒ์„ธ ํ…œํ”Œ๋ฆฟ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •

Line 29 ~ 32 ์ถ”๊ฐ€

+ ์งˆ๋ฌธ์˜ ์ถ”์ฒœ ๋ฒ„ํŠผ์„ ์งˆ๋ฌธ์˜ ์ˆ˜์ • ๋ฒ„ํŠผ ์ขŒ์ธก์— ์ถ”๊ฐ€ํ•˜๊ณ , ๋ฒ„ํŠผ์— ์ถ”์ฒœ ์ˆ˜๋ฅผ ํ•จ๊ป˜ ํ‘œ์‹œํ•˜๋„๋ก ์„ค์ •

 

+ << Line 30 >>

: class ์†์„ฑ์— "recommend"๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝ๋กœ data-uri์— ์ •์˜๋œ URL์ด ํ˜ธ์ถœ๋˜๋Š” ๋ฐฉ์‹ ์‚ฌ์šฉ  -->  "์ถ”์ฒœ" ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„๋•Œ ํ™•์ธ์ฐฝ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ํ™•์ธ์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•จ

 

 

 

2. <์ถ”์ฒœ> ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ '์ •๋ง๋กœ ์ถ”์ฒœํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?'๋ผ๋Š” ํ™•์ธ ์ฐฝ์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด projects\mysite\templates\pybo\question_detail.html ํŒŒ์ผ์„ ์—ด์–ด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ ์ถ”๊ฐ€

Line 104 ~ 111 ์ถ”๊ฐ€

+ ์ถ”์ฒœ ๋ฒ„ํŠผ์— class="recommend"๊ฐ€ ์ ์šฉ๋จ  -->  ์ถ”์ฒœ ๋ฒ„ํŠผ ํด๋ฆญ  -->  "์ •๋ง๋กœ ์ถ”์ฒœํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?" ์ถœ๋ ฅ  -->  "ํ™•์ธ" ์„ ํƒ  -->  data-uri ์†์„ฑ์— ์ •์˜ํ•œ URL ํ˜ธ์ถœ

 

 

 

3. ์œ„์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด {% url 'pybo:question_vote' question.id %} URL์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋‹ˆ projects\mysite\pybo\urls.py ํŒŒ์ผ์„ ์—ด์–ด ์•„๋ž˜์™€ ๊ฐ™์ด URL ๋งคํ•‘ ๊ทœ์น™ ์ถ”๊ฐ€

Line 29 ์ถ”๊ฐ€

 

 

 

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 ํŒŒ์ผ์„ ์—ด์–ด ๋‹ต๋ณ€์˜ ์ถ”์ฒœ์ˆ˜๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ๋‹ต๋ณ€์„ ์ถ”์ฒœํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํŠผ์„ ์งˆ๋ฌธ ์ƒ์„ธ ํ…œํ”Œ๋ฆฟ์— ์ถ”๊ฐ€

Line 60 ~ 63 ์ถ”๊ฐ€

 

 

 

2. ์œ„์˜ ์‚ฌ์ง„์—์„œ {% url 'pybo:answer_vote' answer.id %}์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฏ€๋กœ projects\mysite\pybo\urls.py ํŒŒ์ผ์„ ์—ด์–ด ์•„๋ž˜์ฒ˜๋Ÿผ URL ๋งคํ•‘ ๊ทœ์น™ ์ถ”๊ฐ€

Line 30 ์ถ”๊ฐ€

 

 

 

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