Follow
- ManyToManyField 작성 후 마이그레이션(user간 팔로우이기 때문에 자기 자신을 참조 )
class User(AbstractUser) :
followings = models.ManyToManyField('self', symmetrical=False, related_name='followers')
Symmetrical
- ManyToManyField가 동일한 모델(on self)를 가리키는 정의에서만 사용
- symmetrical=True(기본값)일 경우 Django는 person_set 매니저를 추가하지 않음(True이면 1번이 2번에게 follow를 했을 때 2번도 1번을 자동으로 follow하게 됨 )
- source 모델의 인스턴스가 target 모델의 인스턴스를 참조하면, target 모델 인스턴스도 source 모델 인스턴스를 자동으로 참조하도록 함
- 즉, 내가 당신 친구라면 당신도 내 친구
- 대칭을 원하지 않는 경우 False로 설정
필드 확인
View
def follow(request,user_pk) :
me = request.user
you = get_object_or_404(get_user_model(),pk=user_pk)
if me!=you :
if request.user in you.followers.all() :
you.followers.remove(me)
else :
you.followers.add(me)
return redirect('accounts:profile', you.username)
html
#profile.html
{% if user != person %}
<form action="{% url 'accounts:follow' person.pk %}" method="POST">
{% csrf_token %}
{% if user in person.followers.all %}
<input type="submit" value="언팔">
{% else %}
<input type="submit" value="팔로우">
{% endif %}
</form>
{% endif %}