๐Ÿ‘ฆ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„/TIL(Today I Learned)

TIL_220613_ํŒ€ ํ”„๋กœ์ ํŠธ django

  • -

์ด๋ฒˆ django ํŒ€ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ธฐํš์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์™€์ธ ์ถ”์ฒœ ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋‹ค.

 

๋‚˜๋Š” ์ด๋ฒˆ ๋งก์€ ๊ธฐ๋Šฅ์œผ๋กœ๋Š”

 

<๊ฐœ์ธํŽ˜์ด์ง€>

  • [x] ์ฐœ ๋ชฉ๋ก ๋ณด์—ฌ์ฃผ๊ธฐ
  • [x] ์ฐœ ์™€์ธ ํด๋ฆญ ์‹œ ์ƒ์„ธํŽ˜์ด์ง€ ์ด๋™
  • [x] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ๋ณด์—ฌ์ฃผ๊ธฐ
  • [x] ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํด๋ฆญ ์‹œ ์ƒ์„ธํŽ˜์ด์ง€ ์ด๋™
  • [ ] ๋ชฉ๋ก ๋ฆฌ์ŠคํŠธ ์ˆœ์„œ (์ตœ์‹ ์ˆœ, ใ…‡ใ…‡ใ…‡์ˆœ ๋“ฑ)
  • [x] ์™€์ธ ํด๋ฆญ ์‹œ ํ•ด๋‹น ์ƒ์„ธํŽ˜์ด์ง€ ์ด๋™

<์ƒ์„ธํŽ˜์ด์ง€>

  • [x] ์ฐœํ•˜๊ธฐ ๊ธฐ๋Šฅ
  • [x] ์ฐœํ•˜๊ธฐ ์ทจ์†Œ

 

์œ„์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 


 

์ฐœ ๋ชฉ๋ก ๋ณด์—ฌ์ฃผ๊ธฐ

- ์‚ฌ์šฉ์ž์˜ id ๋ฅผ ๋ฐ›์•„ UserModel ๋กœ ๋Œ€์กฐํ•˜์—ฌ user ๋ณ€์ˆ˜์— ์ •์˜ํ•˜๊ณ  ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ์™€์ธ ์œ„์‹œ๋ฆฌ์ŠคํŠธ(ManyToManyField related_name=wine_wish) ์ •๋ณด๋ฅผ wine_list ๋ณ€์ˆ˜์— ์ •์˜ํ•œ๋‹ค.

- return render ๋กœ ๋ณด๋‚ผ ์ฃผ์†Œ์™€ wine_list ์˜ ์ •๋ณด๋ฅผ ๋ณด๋‚ธ๋‹ค.

# ์ฐœ ๋ชฉ๋ก ๊ฐ€์ ธ์˜ค๊ธฐ
@login_required
def get_wish(request, id):
    user = UserModel.objects.get(id=id)
    if request.method == 'GET':
        wine_list = user.wine_wish.all()

        return render(request, 'user/my_wish.html', {'wine_list': wine_list})

 

์ฐœ ์™€์ธ ํด๋ฆญ ์‹œ ์ƒ์„ธํŽ˜์ด์ง€ ์ด๋™ & ๋ฆฌ๋ทฐ ๋ชฉ๋ก ํด๋ฆญ ์‹œ ์ƒ์„ธํŽ˜์ด์ง€ ์ด๋™

- a ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์™€์ธ์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด path ์ฃผ์†Œ๋กœ ์ •์˜

{% for wine in wine_list %}
            {% csrf_token %}
            <a class="dh-mywish-card" href="/wine/{{ wine.id }}">

 

๋ฆฌ๋ทฐ ๋ชฉ๋ก ๋ณด์—ฌ์ฃผ๊ธฐ

- ์‚ฌ์šฉ์ž์˜ id ๋ฅผ ๋ฐ›์•„ UserModel ๋กœ ๋Œ€์กฐํ•˜์—ฌ user ๋ณ€์ˆ˜์— ์ •์˜ํ•˜๊ณ  ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ์™€์ธ ๋ฆฌ๋ทฐ๋ฆฌ์ŠคํŠธ(objects.filter ์‚ฌ์šฉ) ์ •๋ณด๋ฅผ review_list ๋ณ€์ˆ˜์— ์ •์˜ํ•œ๋‹ค.

- return render ๋กœ ๋ณด๋‚ผ ์ฃผ์†Œ์™€ review_list ์˜ ์ •๋ณด๋ฅผ ๋ณด๋‚ธ๋‹ค.

# review ๋ฆฌ์ŠคํŠธ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
@login_required
def get_review(request, id):
    user = UserModel.objects.get(id=id)
    review_list = ReviewModel.objects.filter(author_id=user).order_by('-created_at')

    return render(request, 'user/my_review.html', {'review_list': review_list})

 

์œ„์‹œ๋ฆฌ์ŠคํŠธ ์ถ”๊ฐ€ ๋ฐ ์ทจ์†Œ

- django ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์‘์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ ๋กœ์ง์„ ๊ตฌํ˜„

# ์ฐœ ๋ชฉ๋ก ์ถ”๊ฐ€ํ•˜๊ธฐ
@login_required
def post_wish(request, id, code):
    if request.method == 'POST':
        wine = WineModel.objects.get(id=id)
        user = request.user
        click_wish = user.wine_wish.all()
        if wine in click_wish:
            user.wine_wish.remove(wine)
        else:
            user.wine_wish.add(wine)
        if code == 1:
            return redirect('wines:wine_detail_view', id)
        elif code == 2:
            return redirect('users:get_wish', user.id)

 

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.