<reponame>na86421/Django_practice<filename>pybo/views/answer_views.py
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404, redirect, resolve_url
from django.utils import timezone

from ..forms import AnswerForm
from ..models import Answer, Question


@login_required(login_url='common:login')
def answer_create(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    if request.method == "POST":
        form = AnswerForm(request.POST)
        if form.is_valid():
            answer = form.save(commit=False)
            answer.author = request.user  # 답변 글쓴이는 현재 로그인한 계정
            answer.create_date = timezone.now()
            answer.question = question
            answer.save()
            return redirect('{}#answer_{}'.format(resolve_url('pybo:detail', question_id=question_id), answer.id))
    else:
        form = AnswerForm()
    context = {'question': question, 'form': form}
    return render(request, 'pybo/question_detail.html', context)

    # Answer 모델이 Question 모델을 Foreign Key로 참조하고 있으므로 question.answer_set 표현을 사용할 수 있다.
    # 하나의 질문에 여러개의 answer(답변)이 달릴 수 있음, 질문에 달린 답변은 set 을 통하여 답변 세트를 조회.
    # Answer 모델을 직접 사용하여 데이터를 저장할 수도 있다.
    # answer = Answer(question=question, content=request.POST.get('content'), create_date=timezone.now())
    # question.answer_set.create(content=request.POST.get('content'), create_date=timezone.now())


@login_required(login_url='common:login')
def answer_modify(request, answer_id):
    answer = get_object_or_404(Answer, pk=answer_id)
    if request.user != answer.author:
        messages.error(request, '수정권한이 없습니다')
        return redirect('pybo:detail', question_id=answer.question.id)

    if request.method == "POST":
        form = AnswerForm(request.POST, instance=answer)
        if form.is_valid():
            answer = form.save(commit=False)
            answer.author = request.user
            answer.modify_date = timezone.now()
            answer.save()
            return redirect('{}#answer_{}'.format(resolve_url('pybo:detail', question_id=answer.question.id), answer.id))
    else:
        form = AnswerForm(instance=answer)
    context = {'answer': answer, 'form': form}
    return render(request, 'pybo/answer_form.html', context)


@login_required(login_url='common:login')
def answer_delete(request, answer_id):
    answer = get_object_or_404(Answer, pk=answer_id)
    if request.user != answer.author:
        messages.error(request, '삭제권한이 없습니다')
    else:
        answer.delete()
    return redirect('pybo:detail', question_id=answer.question.id)

from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404, redirect, resolve_url
from django.utils import timezone

from ..forms import AnswerForm
from ..models import Answer, Question


@login_required(login_url='common:login')
def answer_create(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    if request.method == "POST":
        form = AnswerForm(request.POST)
        if form.is_valid():
            answer = form.save(commit=False)
            answer.author = request.user  # 답변 글쓴이는 현재 로그인한 계정
            answer.create_date = timezone.now()
            answer.question = question
            answer.save()
            return redirect('{}#answer_{}'.format(resolve_url('pybo:detail', question_id=question_id), answer.id))
    else:
        form = AnswerForm()
    context = {'question': question, 'form': form}
    return render(request, 'pybo/question_detail.html', context)

    # Answer 모델이 Question 모델을 Foreign Key로 참조하고 있으므로 question.answer_set 표현을 사용할 수 있다.
    # 하나의 질문에 여러개의 answer(답변)이 달릴 수 있음, 질문에 달린 답변은 set 을 통하여 답변 세트를 조회.
    # Answer 모델을 직접 사용하여 데이터를 저장할 수도 있다.
    # answer = Answer(question=question, content=request.POST.get('content'), create_date=timezone.now())
    # question.answer_set.create(content=request.POST.get('content'), create_date=timezone.now())


@login_required(login_url='common:login')
def answer_modify(request, answer_id):
    answer = get_object_or_404(Answer, pk=answer_id)
    if request.user != answer.author:
        messages.error(request, '수정권한이 없습니다')
        return redirect('pybo:detail', question_id=answer.question.id)

    if request.method == "POST":
        form = AnswerForm(request.POST, instance=answer)
        if form.is_valid():
            answer = form.save(commit=False)
            answer.author = request.user
            answer.modify_date = timezone.now()
            answer.save()
            return redirect('{}#answer_{}'.format(resolve_url('pybo:detail', question_id=answer.question.id), answer.id))
    else:
        form = AnswerForm(instance=answer)
    context = {'answer': answer, 'form': form}
    return render(request, 'pybo/answer_form.html', context)


@login_required(login_url='common:login')
def answer_delete(request, answer_id):
    answer = get_object_or_404(Answer, pk=answer_id)
    if request.user != answer.author:
        messages.error(request, '삭제권한이 없습니다')
    else:
        answer.delete()
    return redirect('pybo:detail', question_id=answer.question.id)
# 답변 글쓴이는 현재 로그인한 계정 #answer_{}'.format(resolve_url('pybo:detail', question_id=question_id), answer.id)) # Answer 모델이 Question 모델을 Foreign Key로 참조하고 있으므로 question.answer_set 표현을 사용할 수 있다. # 하나의 질문에 여러개의 answer(답변)이 달릴 수 있음, 질문에 달린 답변은 set 을 통하여 답변 세트를 조회. # Answer 모델을 직접 사용하여 데이터를 저장할 수도 있다. # answer = Answer(question=question, content=request.POST.get('content'), create_date=timezone.now()) # question.answer_set.create(content=request.POST.get('content'), create_date=timezone.now()) #answer_{}'.format(resolve_url('pybo:detail', question_id=answer.question.id), answer.id))