hyeonga_code

파이선 웹구축_장고_32_투표 참여 본문

Python_Django

파이선 웹구축_장고_32_투표 참여

hyeonga 2023. 6. 24. 05:59
반응형

- 투표 참여

- set 자료형 추가, 삭제

 

1. 투표 정보 넘길 경로 설정 <vote> > 'urls.py'

'urls.py'

=====

1
2
3
4
5
6
7
8
9
10
from django.urls import path
from . import views
 
 
app_name='vote'
urlpatterns = [
    path('index/', views.index, name="index"),
    path('detail/<vpk>', views.detail, name='detail'),
    path('vote/<vpk>', views.vote, name='vote'),
]
cs

2. 투표 함수 설정 <vote> > 'views.py'

'views.py'

=====

1
2
3
4
5
6
7
8
9
10
11
from django.shortcuts import render, redirect
from .models import Topic,Choice
 
def vote(request, vpk):
    tp = Topic.objects.get(id=vpk)
    tp.voter.add(request.user)
    vpk = request.POST.get('cho')
    c.num +=1
    #_ 중복투표기능이 됨
    c.save()
    return redirect('vote:detail', vpk)
cs

>> 중복 투표 할 수 없게 작성

최종 'views.py'

=====

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from django.shortcuts import render, redirect
from .models import Topic,Choice
 
def vote(request, vpk):
    tp = Topic.objects.get(id=vpk)
    if not request.user in tp.voter.all():
        #_ 기존에 투표하지 않은 사람이라면
        tp.voter.add(request.user)
        vpk = request.POST.get('cho')
        c = Choice.objects.get(id=vpk)
        c.num +=1
        c.save()
    return redirect('vote:detail', vpk)
 
def detail(request, vpk):
    tp = Topic.objects.get(id=vpk)
    ch = tp.choice_set.all()
    print(ch)
    #_ 선택지 정보 넘겨오기
    context = {
        'tp' : tp,
        'cset' : ch,
    }
    return render(request, 'vote/detail.html', context)
 
def index(request):
    tp = Topic.objects.all()
    context = {
        'tp' : tp
    }
    return render(request, 'vote/index.html', context)
cs

 

반응형