users app
사용class Follow(models.Model):
from_user = models.ForeignKey('User', on_delete=models.CASCADE, related_name= 'to_user')
to_user = models.ForeignKey('User', on_delete=models.CASCADE, related_name='from_user')
class Meta:
db_table = "follows"
Follow class는 User와 User 사이의 중간 테이블로 from_user, to_user 두가지 attribute 모두 User class를 ForeignKey로 갖음
따라서 related_name 옵션이 반드시 설정되어야함 (없으면 makemigration안됨)
Related_name 관련 블로그(1) / 블로그(2)- 위코드멘토님
모델 작성 완료 후 makemigartions, migrate 진행
In : user = User.objects.get(id=1)
In : user
Out: <User: User object (1)>
In : follow = Follow.objects.filter(from_user=user)
In : follow
Out: <QuerySet [<Follow: Follow object (2)>, <Follow: Follow object (5)>]>
In : follow.user
class FollowView(View):
@signin_decorator
def post(self, request, user_id):
user = request.user
from_user = user
to_user = User.objects.get(id=user_id)
follow = Follow.objects.filter(from_user = from_user, to_user=to_user)
if follow:
follow.delete()
message = 'unfollowing'
else:
Follow.objects.create(
from_user = from_user,
to_user = to_user,
)
message = 'following'
return JsonResponse({'message':message}, status=200)
postings/urls.py
from django.urls import path
from users.views import SignUpView, SignInView, FollowView
urlpatterns = [
path('/signup', SignUpView.as_view()),
path('/signin', SignInView.as_view()),
path('/follow/<int:user_id>', FollowView.as_view()),
]