기능을 계속 추가하다보면 뷰 파일(views.py)에 함수가 계속 늘어나는 불편함
해결
1. views.py 파일만 분리하고 나머지 그대로 (비추)
2. pybo/urls.py에서 views.index
대신 base_views.index
처럼 전체 경로를 써주는 방법
from .views import base_views, question_views, answer_views, comment_views
불러오고
urlpatterns 에서 이름들 수정
from pybo.views import base_views
config/urls.py의 index에 해당되는 URL 매핑도 views 대신 base_views를 사용하도록 다음처럼 수정해야한다.
질문 또는 답글에 "추천(좋아요)"을 할 수 있는 기능을 추가
class Question(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='author_question')
voter = models.ManyToManyField(User, related_name='voter_question')
추천인(voter) 속성을 ManyToManyField 관계로 추가
하나의 질문에 여러명이 추천할 수 있고 한 명이 여러개의 질문에 추천할 수 있으므로 이런 경우에는 "다대다(N:N)" 관계를 의미하는 ManyToManyField를 사용
author와 voter가 모두 User모델로 참조-> User.question_set 처럼 User 모델을 통해서 Question 데이터에 접근하려고 할 때 author를 기준으로 할지 voter를 기준으로 해야 할지 명확하지 않다는 오류 -> related_name이라는 옵션을 추가하여 해결
질문 추천 기능 만들기
템플릿 수정
URL 매핑 추가
@login_required(login_url='common:login')
def vote_question(request, question_id):
"""
pybo 질문추천등록
"""
question = get_object_or_404(Question, pk=question_id)
if request.user == question.author:
messages.error(request, '본인이 작성한 글은 추천할수 없습니다')
else:
question.voter.add(request.user)
return redirect('pybo:detail', question_id=question.id)
오류를 표시하기 위해 상세조회 화면 상단에 오류표시역영추가
같은 방식으로
템플릿 수정.
테이블 칼럼 추가하고 추천이 있을 경우만 표시하기