[django] 점프 투 장고 - 장고 기초 6

Joy·2020년 6월 17일
0

Django | 점프투장고

목록 보기
8/22

데이터 저장

페이지 요청을 통해서 데이터를 저장하는 방법
상세조회 화면에 답변을 입력할 수 있는 텍스트창(textarea)을 생성하고 "답변등록"이라는 버튼을 생성하여 답변(Answer) 데이터를 저장


답변 등록 버튼

  • detail 템플릿 수정(추가)
<form action="{% url 'pybo:answer_create' question.id %}" method="post">
{% csrf_token %}
<textarea name="content" id="content" rows="15"></textarea>
<input type="submit" value="답변등록">
</form>

텍스트 창, 등록 버튼 추가.
{% csrf_token %} : 보안 관련. 실제 웹페이지에서 작성된 데이터인지를 판단. form 태그 밑에 써주는게 좋음.



URL 추가

  • pybo/urls.py에 다음과 같은 URL 매핑 정보를 등록
urlpatterns = [
    path('', views.index, name='index'),
    path('<int:question_id>/', views.detail, name='detail'),
    
    path('answer/create/<int:question_id>/', views.answer_create, name='answer_create'),
    
]



뷰 함수 추가

  • views 에 함수 추가
def answer_create(request, question_id):
    """
    pybo 답변등록
    """
    question = get_object_or_404(Question, pk=question_id)
    question.answer_set.create(content=request.POST.get('content'), create_date=timezone.now())
    return redirect('pybo:detail', question_id=question.id)

request.POST.get('content') : POST로 전송된 폼(form) 데이터 항목 중 content의 값을 의미
question.answer_set : 질문의 답변. Question과 Answer 모델은 서로 ForeignKey 로 연결되어 있기때문에 이처럼 사용할 수 있다.
redirect 함수 : 페이지 이동을 위해 장고가 제공하는 함수. 답변 저장 후 pybo:detail 페이지로 이동



답변저장

페이지에서 답변 등록할 수 있음.



답변조회

화면에 답변 표시하기

  • 상세조회 템플릿 수정
<h5>{{ question.answer_set.count }}개의 답변이 있습니다.</h5>
<div>
    <ul>
    {% for answer in question.answer_set.all %}
        <li>{{ answer.content }}</li>
    {% endfor %}
    </ul>
</div>

결과

profile
roundy

0개의 댓글