원래 포스팅앱에서 다 관리를 해보라고 과제에 나와있는데,
나는 여러개 관리해보고 연결해보고 싶어서 포스팅/댓글/좋아요/팔로우/유저를
다 나눠서 앱을 관리해봄
이렇게 ㅇㅇ
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 설정을 함
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 해줌