[Westagram] : 좋아요

Kiyong Lee·2021년 10월 3일
0

Django

목록 보기
23/35
post-custom-banner

과제


원래 포스팅앱에서 다 관리를 해보라고 과제에 나와있는데,

나는 여러개 관리해보고 연결해보고 싶어서 포스팅/댓글/좋아요/팔로우/유저를

다 나눠서 앱을 관리해봄

이렇게 ㅇㅇ


코드


models.py

from django.db import models

from users.models import TimeStampedModel

class Like(TimeStampedModel) :
    posting = models.ForeignKey('postings.Posting', on_delete=models.CASCADE)
    email   = models.ForeignKey('users.User', on_delete=models.CASCADE)

    class Meta :
        db_table = 'likes'

좋아요는 특정 유저가 특정 게시물에 하기 때문에 두 컬럼 모두 참조를해서 값 가져옴

그리고 게시물이 삭제되거나, 유저가 탈퇴할 경우 좋아요에 대한 데이터도
삭제되어야 하기 때문에 on_delete에 CASCADE 설정을 함


views.py

class LikeView(View) :
    def post(self, request) :
        try :
        #email_id , posting_id
        #11번 포스팅에 9,10,11번이 좋아요 해봄

            data = json.loads(request.body)

            email_id   = data['email_id']
            posting_id = data['posting_id']

            count = Like.objects.filter(posting_id=posting_id).count()

            if Like.objects.filter(email_id=email_id, posting_id=posting_id).exists() :

                Like.objects.filter(email_id=email_id, posting_id=posting_id).delete()
 
                return JsonResponse({'message':'like delete', 'count like' : count-1}, status=200)

            Like.objects.create(
                email_id   = email_id,
                posting_id = posting_id
            )

            return JsonResponse({'message':'hihi', 'count like' : count+1}, status=200)
        
        except KeyError :
            return JsonResponse({'message':'KEYERROR'}, status=400)

게시물마다 좋아요를 할 수 있기 때문에 개수를 넣어주기 위한 count 변수 설정

그리고 특정 게시물에 특정 유저가 좋아요를 했다면, 좋아요를 눌렀을 때
삭제되어야 하므로 삭제를 한 뒤 count에서도 -1을 함
그게 아니라면 좋아요 +1

처음에 삭제하면 자동으로 count가 -1 깎이는 줄 알았는데, 그게 아니었다.

try문이 다 끝나고 나가야 count에 반영이 되는데, 그렇게 하기에는

코드를 나눠야 하는 불편함이 있어서 취소면 -1, 추가면 +1 해줌

profile
ISTJ인 K-개발자
post-custom-banner

0개의 댓글