728x90
320x100
좋아요 기능 구현
좋아요 필드 만들기
작성했던 ERD 다시 확인해보면
계정 1 : M 좋아요 M : 1 게시글 형태이기 때문에 아무래도
좋아요 필드는 게시글(Post Model)과 계정(User Model)을 ManyToMany로 연결하는 필드여야겠다는 판단
👉 like_users 필드 추가
# post/models.py
class Post(models.Model):
class Meta:
db_table = "my_posting"
post_author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='posts') # 글 작성자 : 유저 모델의 사용자를 상속받습니다.
post_title = models.CharField("글제목", max_length=45)
post_content = models.TextField("글내용")
post_img = models.FileField("이미지", upload_to='',blank=True, null=True) # 글 내 이미지 업로드
created_at = models.DateTimeField(auto_now_add=True) # 생성시각
updated_at = models.DateTimeField(auto_now=True) # 수정시각
author_id = models.CharField(max_length=45) # 현재 로그인 중인 유저의 기본키 넣을 자리
hearts = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='hearts')
# 좋아요 : 게시글과 사용자를 연결하는 Many To Many 필드입니다.
기능 구현하기
# post/views.py
# ============================= 게시글 좋아요 =============================
@require_POST
def hearts(request, id):
if request.user.is_authenticated: # 로그인 인증 여부
post = Post.objects.get(id=id)
if post.hearts.filter(pk=request.user.id).exists():
post.hearts.remove(request.user)
else:
post.hearts.add(request.user)
return redirect('detail', post.id)
return redirect('sign-in')
<!-- sns/detail_post.html -->
<!-- ===== 좋아요 시작 ===== -->
<div>
<form action="{% url 'hearts' id=post.id %}" method='POST'>
{% csrf_token %}
{% if user in post.hearts.all %}
<!-- 좋아요가 눌러져있는 경우 : 좋아요 취소 -->
<input type="submit" value='좋아요 취소'>
{% else %}
<!-- 좋아요가 눌러지지 않은 경우 : 좋아요 -->
<input type="submit" value='좋아요'>
{% endif %}
</form>
</div>
<!-- ===== 좋아요 끝 ===== -->
빈 하트와 색깔 하트 하고 싶은데
그건 꾸밀 때 생각하고 일단 나중에...
300x250
반응형
GitHub 댓글