[점프 투 플라스크] 공지 및 상단 고정 기능

pybo처럼 게시물을 상단 고정하여 공지로 등록해두고 싶습니다! postgresql 테이블에서 임의로 고정해두는 방법이 있을까요?

seooo03 580

2021년 9월 17일 4:33 오후

목록으로
2개의 답변이 있습니다. 1 / 1 Page

파이보는 Question 테이블에 공지에 해당하는 컬럼을 추가하여 항상 먼저 검색될 수 있도록 order_by 에 공지 컬럼을 걸었습니다.

박응용

2021년 9월 17일 6:18 오후

답변 감사드립니다! 우선 notice 라는 이름으로 컬럼을 추가해서 코드를 짰는데 적용이 안 되는 듯 합니다ㅠ 커멘트에 작성한 것은, SELECT * FROM question ORDER BY (CASE WHEN notice='1' THEN 1 ELSE 2 END), create_date ASC; 이고 그 외의 설정은 데이터타입 integer만 만졌습니다..! 데이터타입이나 커멘트 틀린 부분이 있다면 pybo의 공지 컬럼을 알려주실 수 있을까요?! - seooo03님, 2021년 9월 18일 12:54 오전 추천 , 대댓글
@seooo03님 밑에 답변으로 파이보에서 사용하는 방법을 좀 더 자세히 기술했습니다. - 박응용님, 2021년 9월 18일 9:43 오전 추천 , 대댓글
@박응용님 아.. 플라스크군요, 아래 예시는 장고입니다. 그래도 비슷하게 적용 가능할 겁니다. 도움이 되시기를 바랍니다. - 박응용님, 2021년 9월 18일 9:46 오전 추천 , 대댓글

다음은 pybo.kr의 Question 테이블입니다.

class Question(models.Model):
    class Meta:
        ordering = ['id']

    author = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='author_question')
    subject = models.CharField(max_length=200)
    content = models.TextField()
    create_date = models.DateTimeField(auto_now_add=True, blank=True)
    modify_date = models.DateTimeField(null=True, blank=True)
    voter = models.ManyToManyField(CustomUser, related_name='voter_question', blank=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='category_question')
    view_count = models.IntegerField(null=True, blank=True, default=0)
    notice = models.BooleanField(default=False)  # 공지사항 여부

    def __str__(self):
        return self.subject

    def get_absolute_url(self):
        return reverse('pybo:question_detail', args=[self.id])

    def get_recent_comments(self):
        return self.comment_set.all().order_by('-create_date')[:5]

그리고 공지사항 정렬은 다음과 같이 합니다.

_question_list = _question_list.order_by('-notice', '-create_date')

물론 notice 컬럼 값은 어드민이나 수정화면에서 먼저 설정해야 합니다.

박응용

2021년 9월 18일 9:43 오전