Tags
- 스택
- distinct
- Article & User
- 통계학
- 이진트리
- N:1
- 쟝고
- ORM
- 완전검색
- Queue
- 뷰
- migrations
- Django
- SQL
- stack
- 큐
- 트리
- Tree
- 그리디
- drf
- outer join
- regexp
- delete
- M:N
- Vue
- DB
- 백트래킹
- update
- count
- create
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Notice
Recent Posts
Link
데이터 분석 기술 블로그
DB에 대하여(19)_팔로우 기능 구현 (feat. Django) 본문
User(M) - User(N)
0명 이상의 회원은 0명 이상의 회원과 관련이 있습니다. 즉, 회원은 0명 이상의 팔로워를 가질 수 있고, 0명 이상의 다른 회원들을 팔로잉할 수 있습니다.
ManyToManyFiled를 작성합니다.
- 참조 : 내가 팔로우하는 사람들(팔로잉, followings)
- 역참조 : 상대방 이밪에서 나는 팔로워 중 한 명 (팔로워, followers)
- 바뀌어도 상관 없으나 관계 조회 시 생각하기 편한 방향으로 정한 것입니다.
# accounts/models.py
class User(AbstractUser):
followings = models.ManyToManyField('self', symmetraicl=False, related_name='followers')
Migrations 진행 후 중개 테이블을 확인합니다.
url을 작성합니다.
# accounts/urls.py
urlpatterns = [
...,
path('<int:user_pk>/follow/', views.follow, name='follow'),
]
view 함수를 작성합니다.
# accounts/views.py
@login_required
def follow(request, user_pk):
User = get_user_model()
person = User.objects.get(pk=user_pk)
if person != request.user:
if request.user in person.followers.all():
person.followers.remove(request.user)
else:
person.followers.add(request.user)
return redirect('accounts:profile', person.username)
프로필 유저의 팔로잉, 팔로워 수 & 팔로우, 언팔로우 버튼을 작성합니다.
<!-- accounts/profile.html -->
<div>
<div>
팔로잉 : {{ person.followings.all|length }} / 팔로워 : {{ person.followers.all|length }}
</div>
{% if request.user != person %}
<div>
<form actions="{% url 'accounts:follow' person.pk %}" method="POST">
{% csrf_token %}
{% if request.user in person.followers.all %}
<input type="submit" value="Unfollow">
{% else %}
<input type="submit" value="Follow">
{% endif %}
</form>
</div>
{% endif %}
</div>
팔로우 버튼 클릭 후 팔로우 버튼 변화 및 중개 테이블 데이터를 확인합니다.
참고
.exists()
QuerySet에 결과가 포함되어 있으면 True를 반환하고 결과가 포함되어 있지 않으면 False를 반환합니다. 큰 QuerySet에 있는 특정 객체 검색에 유용합니다.
'DB' 카테고리의 다른 글
DB에 대하여(21)_Improve query (feat. Django) (0) | 2024.05.08 |
---|---|
DB에 대하여(20)_Fixtures (feat. Django) (0) | 2024.05.07 |
DB에 대하여(18)_프로필 기능 구현 (feat. Django) (0) | 2024.05.05 |
DB에 대하여(17)_좋아요 기능 구현 (feat. Django) (0) | 2024.05.04 |
DB에 대하여(16)_좋아요 모델 관계 설정 (feat. Django) (0) | 2024.05.03 |