팔로우 적용하기

2star_·2024년 12월 28일
0

django

목록 보기
15/18

accounts/models.py

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건드렸으니 마이그레이션 진행

views.py

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')

profile.html

    <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>
profile
안녕하세요.

0개의 댓글

관련 채용 정보