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을 설정했는데, 도무지 좋은 변수명이 생각나지 않아서
저렇게 쓰게 됐다;;
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에도 써놓고 했다
다만, 여기서 내가 나 자신을 팔로우할 수 없으므로
가져온 팔로우 변수와 팔로잉 변수가 똑같다면 나 자신을 할 수 없다고 문구뜨게 함
그리고 내가 이미 팔로우한 계정을 또 팔로우 누르면 팔로우취소
그런거 없다면 팔로우