from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
following = models.ManyToManyField(
"self", symmetrical=False, related_name="followers"
)
ManyToManyField
를 사용하여 다대다 관계 설정self
를 사용하여 나 자신과 관계를 맺음 정의symmetrical
은 대칭형/ 기본값 True
일 경우 싸이월드 일촌관계 처럼 양방향 소통 (니가 설정되면 나도 설정된다!)팔로우 설정시 False
로 설정해야 나만 팔로우 할 수 있다. self
가 들어가야 사용할 수 있음 모델 db건드렸으니 마이그레이션 진행
def profile(reqeust, username):
member = get_object_or_404(get_user_model(), username=username)
context = {
"member" : member,
}
return render(reqeust, 'profile.html', context)
@require_POST
def follow(request, user_id):
if request.user.is_authenticated:
member = get_object_or_404(get_user_model(), pk=user_id)
if member != request.user:
if member.followers.filter(pk=request.user.pk).exists():
member.followers.remove(request.user)
else:
member.followers.add(request.user)
return redirect('profile', username=member.username)
return redirect('login')
<div>
{% if request.user != member %}
<form action="{% url 'follow' member.pk %}" method="POST">
{% csrf_token %}
{% if request.user in member.followers.all %}
<input type="submit" value="언팔로우">
{% else %}
<input type="submit" value="팔로우">
{% endif %}
</form>
{% endif %}
</div>