from django.db import models
from django.conf import settings
# Create your models here.
class Article(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
# 이 부분 !!!!!!=================================================================================
like_users = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='like_articles')
# 이 부분 !!!!!!=================================================================================
title = models.CharField(max_length=10)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
기존 Article(게시판)모델에 like_users필드 추가
ManyToManyField사용, 변수값 넣어주고, related_name을 정해줘야 함
related_name을 정해주지 않으면 기존 user필드의 역참조 매니저가 겹치게 됨
스키마
게시글의 pk와 user의 pk가 저장됨
urls.py
from django.urls import path
from . import views
app_name = 'articles'
urlpatterns = [
.....
path('<int:article_pk>/likes/', views.likes, name='likes'),
]
views.py
@require_POST
def likes(request, article_pk):
if request.user.is_authenticated:
article = Article.objects.get(pk=article_pk)
if article.like_users.filter(pk=request.user.pk).exists():
# 좋아요 취소 (remove)
article.like_users.remove(request.user)
else:
# 좋아요 추가 (add)
article.like_users.add(request.user)
return redirect('articles:index')
return redirect('accounts:login')
매개변수로 받은 article_pk로 해당 글을 찾고
그 글의 like_users필드에 request.user.pk가 있다면(이미 좋아요를 누른 상황), (DB에 저장되어 있는 상황)