인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

meyou1218님의 프로필 이미지
meyou1218

작성한 질문수

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)

03-05 admin 앱을 통한 Song 데이터 관리

좋아요 개수 올리기 관련 질문입니다

작성

·

187

·

수정됨

1

수업내용을 따라가다가 좋아요 개수가 올라가지 않아서

맨아래와 코드와 같이 고쳤더니 좋아요가 올라갔습니다. 기존코드(주석된 것)와 같이

likes_dict = get_likes_dict(melon_uid_list)  # id와 좋아요 개수가 dict로 뜸

이부분에서 likes_dict 를 쓰신 이유가 궁금합니다.

그리고 if song.like_count != likes_dict.get(song.melon_uid)

이부분은 당연히 같은거라서 if문이 실행이 될수가 없지 않나요?

    # 액션
    def update_like_count(self, request, queryset):
        melon_uid_list = queryset.values_list("melon_uid", flat=True)
        likes_dict = get_likes_dict(melon_uid_list)  # id와 좋아요 개수가 dict로 뜸

        changed_count = 0
        for song in queryset:
            song.like_count += 1

            # 기존 코드
            # if song.like_count != likes_dict.get(song.melon_uid):
            #     song.like_count = likes_dict.get(song.melon_uid)
            #     changed_count += 1

        Song.objects.bulk_update(
            queryset,
            fields=["like_count"],
        )
        self.message_user(request, message=f"{changed_count}개 곡의 좋아요 갱신 완료")

답변 1

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

구현한 기능은 멜론 사이트에서의 해당 곡의 좋아요 수를 크롤링해서 최신 데이터를 반영하는 기능입니다.

그러니, 해당 기능을 수행하실때 멜론 사이트에서 좋아요 수의 변화가 없다면 변경되지 않습니다. // 기능 실행 시마다 좋아요 수가 무조건 +1 이 되어서는 안 됩니다.

likes_dict 사전에는 각 곡의 멜론 사이트에서의 최신 좋아요 수가 저장되어있습니다. if 조건절을 통해, 좋아요 수의 변화가 있는 곡만 체크해서 좋아요 수가 변경된 곡의 수를 changed_count 를 통해 카운트했습니다.

meyou1218님의 프로필 이미지
meyou1218
질문자

아하 이해했습니다. 감사합니다!

meyou1218님의 프로필 이미지
meyou1218

작성한 질문수

질문하기