[django] 점프 투 장고 - 장고 심화 11, 12

Joy·2020년 6월 29일
0

Django | 점프투장고

목록 보기
19/22

뷰 파일 분리하기

기능을 계속 추가하다보면 뷰 파일(views.py)에 함수가 계속 늘어나는 불편함

해결
1. views.py 파일만 분리하고 나머지 그대로 (비추)
2. pybo/urls.py에서 views.index 대신 base_views.index 처럼 전체 경로를 써주는 방법

views 디렉토리 수정

  • pybo 안에 views 디렉토리 추가
  • 디렉토리 안에 기능별로 나눈 views 파일 저장

pybo/urls.py

  • urls 매핑 수정

from .views import base_views, question_views, answer_views, comment_views
불러오고

urlpatterns 에서 이름들 수정

config/urls.py

from pybo.views import base_views
config/urls.py의 index에 해당되는 URL 매핑도 views 대신 base_views를 사용하도록 다음처럼 수정해야한다.


추천

질문 또는 답글에 "추천(좋아요)"을 할 수 있는 기능을 추가

모델변경

Question 모델에 추천인(voter) 속성을 추가 [pybo\models.py]

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이라는 옵션을 추가하여 해결

Answer 모델에도 추가

makemigrations migrate 실행



질문추천

질문 추천 기능 만들기

질문추천 버튼

템플릿 수정

[pybo\question_detail.html]

질문추천 URL

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)
  • 로그인한 사용자와 추천하려는 질문의 글쓴이가 동일할 경우에는 추천시 오류발생
  • vorter는 여러사람을 추가할 수 있는 ManyToManyField -> add 함수를 사용하여 추천인을 추가

오류표시

오류를 표시하기 위해 상세조회 화면 상단에 오류표시역영추가

테스트

답변추천

같은 방식으로

질문목록에 추천수 표시

템플릿 수정.
테이블 칼럼 추가하고 추천이 있을 경우만 표시하기

profile
roundy

0개의 댓글