[Westagram] : 팔로우

Kiyong Lee·2021년 10월 3일
0

Django

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

과제


코드


models.py

from django.db    import models

from users.models import TimeStampedModel

class Following(TimeStampedModel) :

    following = models.ForeignKey('users.User', on_delete=models.CASCADE, related_name='following_giviing')
    follower  = models.ForeignKey('users.User', on_delete=models.CASCADE, related_name='following_taking')

    class Meta :
        
        db_table = 'followings'

내가 sns를 하지 않아서 팔로우/팔로잉에 대해 엄청 헷갈렸다;;

팔로워는 나를 따르는 사람이라는 뜻에서 나를 팔로우한 사람
팔로잉은 내가 팔로우하는 사람

그리고 두 개의 변수 모두 User를 참조하는데, 이럴 경우 makemigrations을 하면
충돌이 발생한다.
(자세한 건 여기에 기입해놓음)

그래서 related_name을 설정했는데, 도무지 좋은 변수명이 생각나지 않아서
저렇게 쓰게 됐다;;


views.py

import json

from django.views      import View
from django.http       import JsonResponse

from users.utils       import login_decorator
from followings.models import Following

class FollowingView(View) :

    @login_decorator
    def post(self, request) :

        try :
            data = json.loads(request.body)
            
            #following = 내가 팔로우 하는 사람 related_name = following_giviing
            #follower  = 나를 팔로우 하는 사람 related_name = following_taking

            following_id = data['following_id']
            follower_id  = data['follower_id']

            if following_id == follower_id :
                return JsonResponse({'message':'자기자신은 팔로우 할 수 없습니다'}, status=400)

            if Following.objects.filter(follower_id=follower_id, following_id=following_id).exists() :
                Following.objects.filter(follower_id=follower_id, following_id=following_id).delete()
                return JsonResponse({'message':'follow delete'}, status=200)

            Following(
                following_id = following_id,
                follower_id  = follower_id
            ).save()

            return JsonResponse({'message':'following success'}, status=200)

        except KeyError :
            return JsonResponse({'message':'KEY_ERROR'}, status=400)

팔로우, 팔로잉이 계속 헷갈려서 views.py에도 써놓고 했다

다만, 여기서 내가 나 자신을 팔로우할 수 없으므로

가져온 팔로우 변수와 팔로잉 변수가 똑같다면 나 자신을 할 수 없다고 문구뜨게 함

그리고 내가 이미 팔로우한 계정을 또 팔로우 누르면 팔로우취소

그런거 없다면 팔로우

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

0개의 댓글