유저는 유저를 팔로우 할 수 있다.
이때 유저는 모두 회원가입 되어있는 유저여야 한다.
팔로우 하는 유저를 팔로워, 팔로우 당하는 유저를 팔로잉 이라고 한다.
둘 다 User 객체를 참조한다.
하지만 장고에서는 한 클래스 내에서 같은 객체를 참조하면 다음과 같이 에러가 발생한다.
이 오류를 해결하기 위해 사용하는것이 related_name이다.
related_name
관련 개체에서 이 개체의 관계에 사용할 이름
related_name을 지정해주지 않는다면 following
도 posts.Follow.following, follower
도 posts.Follow.folower 처럼 참조하게 된다.
겉으로 보기엔 어? 될 것 같은데? 싶지만 장고에서는 그 두가지를 비교할 수 없다.
따라서 related_name을 추가해 모델을 다음과 같이 작성한다.
이제 우리는 user.follower.follower_id, user.following.following_id 처럼 사용할 수 있다.
팔로우 버튼을 한번 누르면 팔로우 되고, 두번 누른다면 팔로우가 취소된다.
그 말은 한 데이터를 보내서 데이터베이스에 저장(팔로우)되었다면 같은 데이터를 보낸다면 데이터베이스에서 지워주어야(언팔로우) 한다.
먼저 데이터 베이스에 followr_id
와 following_id
가 있는지 검사하고, 없다면 객체를 생성하고 있다면 객체를 지워준다
생성한 뷰를 사용하기 위해 다음과 같이 추가했다.
만약 같은 데이터를 다시 POST
한다면
데이터베이스 안에서도 지워진다!