파이썬 웹프로그래밍 - 태깅

채연·2024년 5월 28일
0

study

목록 보기
8/12
post-thumbnail

스터디 목표

블로그 애플리케이션의 기능을 추가하여 작성하고 이해한다.

(1) 태깅 기능 추가하기

  • 태그(tag)는 게시물을 분류하는 블로그의 일반적인 기능이다.
  • 태그를 사용하면 간단한 키워드를 시용해 콘텐츠를 비계층적 방식으로 분류가 가능하다. 단순히 게시물에 할당할 수 있는 레이블 또는 키워드이다.

(2) 유사 게시물 조회

  • 커스텀 템플릿을 통해 간단한 템플릿 태그를 구현한다.

오답노트

모르는 코드 부분을 정확하게 이해하고 정리한다.

(1) blog/views.py/post_detail

def post_detail(request, year, month, day, post):
    post = get_object_or_404(Post, # 해당 객체가 없으면 404 에러
                             status=Post.Status.PUBLISHED,
                             slug=post,
                             publish__year=year,
                             publish__month=month,
                             publish__day=day)
    # 이 글의 active 댓글 목록, 게시물에 대한 모든 활성 댓글을 조회하기 위해 추가한 것
    comments = post.comments.filter(active=True).order_by('-created')
    # 사용자가 댓글을 달 수 있는 폼(댓글 폼의 인스턴스를 생성한 것)
    form = CommentForm()
    # 유사한 게시물들의 목록
    post_tags_ids = post.tags.values_list('id', flat=True)
    similar_posts = Post.published.filter(tags__in=post_tags_ids).exclude(id=post.id)
    similar_posts = similar_posts.annotate(same_tags=Count('tags')).order_by('-same_tags', '-publish')[:4]
    return render(request,
                  'blog/post/detail.html',
                  {'post':post,
                   'comments':comments,
                   'form':form,
                   'similar_posts':similar_posts})
# ~ 상세 뷰 생성하기 / URL 패턴 수정하기
  • new comment를 작성했는데 최신 댓글을 기준으로 상단에 뜨지 않는 문제가 발생헸다.
## 문제
comments = post.comments.filter(active=True)

## 해결
comments = post.comments.filter(active=True).order_by('-created')
  • 문제의 원인 :
    기본적으로 Django ORM에서 쿼리셋을 생성할 때, 정렬 순서는 모델의 Meta 클래스에 지정된 ordering 옵션을 따르거나, Meta 클래스에 ordering 옵션이 없는 경우 데이터베이스의 기본 정렬 순서에 따른다. 만약 Comment 모델에 ordering 옵션이 설정되지 않았다면, 댓글은 생성된 순서대로(즉, 오래된 순서대로) 반환될 수 있다.

  • 해결 방법 :
    order_by('-created')를 추가하면 댓글을 created 필드를 기준으로 내림차순으로 정렬한다. 여기서 '-created'는 created 필드의 값을 기준으로 내림차순 정렬을 의미하는데 즉, 가장 최근에 작성된 댓글이 쿼리셋의 첫 번째 항목이 된다.

0개의 댓글