from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class User(AbstractUser):
followings = models.ManyToManyField('self', symmetrical=False, related_name='followers')
커스텀 유저앱 models.py에 User로 커스텀한 클래스에 followings 필드 추가
필드는 ManyToManyField, 첫 매개변수는 'self', symmetrical은 False (True로 하면 서로 맞팔이 자동으로 됨)
명시적으로 사용하기 위해 related_name은 followers로 정해주기
accounts/urls.py
from django.urls import path
from . import views
app_name = 'accounts'
urlpatterns = [
.....
path('<int:user_pk>/follow/', views.follow, name='follow'),
]
accounts/views.py
@require_POST
def follow(request, user_pk):
if request.user.is_authenticated:
User = get_user_model()
me = request.user
you = User.objects.get(pk=user_pk)
if me != you:
if you.followers.filter(pk=me.pk).exists():
you.followers.remove(me)
else:
you.followers.add(me)
return redirect('accounts:profile', you.username)
return redirect('accounts:login')