일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Django의 편의성
- 시간복잡도
- 표준 입출력
- Django란
- 엑셀
- 자료구조
- 백준
- vscode
- 프레임워크와 라이브러리의 차이
- getline
- 2557
- EOF
- 입출력 패턴
- scanf
- double ended queue
- 이분그래프
- k-eta
- Django Nodejs 차이점
- 입/출력
- 장고란
- string 메소드
- c++
- UI한글변경
- correlation coefficient
- iOS14
- 알고리즘 공부방법
- 연결요소
- 매크로
- string 함수
- 구조체와 클래스의 공통점 및 차이점
Archives
- Today
- Total
Storage Gonie
31. (app2) POST 처리 (투표결과 DB반영하기) 본문
반응형
1. views.py의 vote함수 수정하기
- 투표 화면에서 투표 버튼을 누르면 urls의 vote관련 url로 연결되고 vote함수가 호출된다.
- 이때 question_id가 파라미터로 전달되며 vote함수에서는 urls로 부터 전달받은 question_id로 특정 Question을 얻을 수 있게 된다.
- 그리고 request파라미터로 부터 from에서 선택했던 내용을 id를 통해 얻을 수 있으며 거기서 얻은 값으로 특정 choice 객체를 얻을 수 있다.
- 그러면 그 얻은 객체에 대해 연산을 수행해 주면 된다.
- 맨 마지막 줄 에 question_id = question_id를 해주는 이유는 polls:results에서 question_id 파라미터를 받고있기 때문이다.
- 두 모듈을 추가한다.
from django.shortcuts import get_object_or_404, redirect
def vote(request, question_id):
question = get_object_or_404(Question, pk = question_id)
try:
selected_choice = question.choice_set.get(pk = request.POST['choice']) # id가 choice인 것의 vlaue 값을 읽어옴
except:
return render(request, 'polls/detail.html', {
'question' : question,
'error_message' : "You didn't select a choice"
})
else: #예외가 발생하지 않은경우
selected_choice.votes += 1 # 모델 객체의 값 변경
selected_choice.save() # DB에 반영
return redirect('polls:results', question_id = question_id)
위 코드를 이해하기 쉽도록 <detail..html>을 첨부하였음.
<h2>{{ question.question_text }}</h2>
{% if error_message %}
<p><strong>{{ error_message }}</strong></p>
{% endif %}
<form action="{% url 'polls:vote' question.id%}" method="POST">
{% csrf_token %}
{% for choice in question.choice_set.all %}
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id}}"/>
<label for="choice{{ forloop.counter }}"> {{choice.choice_text}} <label/><br>
{% endfor %}
<input type="submit" value="투표"/>
</form>
<아무것도 선택하지 않고 투표를 누른경우>
<짬뽕을 누르고 투표를 누른경우>
반응형
'웹개발 > Django 웹서비스 개발(인프런)' 카테고리의 다른 글
33. (app2) generic view를 적용한 Class-based views 방식의 URL 라우팅 (0) | 2019.02.19 |
---|---|
32. (app2) 투표결과 페이지 만들기 (result메소드 수정) (0) | 2019.02.19 |
30. (app2) 커스텀 From 직접 만들기(detail.html수정) (0) | 2019.02.19 |
29. (app2) 하드코딩 URL 제거(index.html 수정, polls.urls.py 수정) (0) | 2019.02.19 |
28. (app2) Django 404핸들링 (0) | 2019.02.17 |
Comments