**MODEL**
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
๋ณ์๋ช
ํญ์ ์ด๋ค ๊ธฐ๋ฅ์ ์ํ ๋ด์ฉ์ธ์ง ํ์คํ๊ฒ ์์ฑํด ์ค๊ฒ
M:N ๊ด๊ณ ์ฆ ; ๋ค๋๋ค ๊ด๊ณ -> ๋ณต์ํ
User์ ๊ฒ์๊ธ์ ๊ด๊ณ ํ์ฑ
์์ฒญ๋ณด๋ธ user ์ ๋ณด๋ request์ ๋ค์ด์๋ค.
๊ทธ๋ผ ํ์ํ ํน์ ๊ฒ์๊ธ์ ๋ํ ์ ๋ณด๋ง django๊ฐ ์ ์ ์๋๋ก
**URL**
path('<int:article_pk>/like/',views.like,name='like'),
**VIEWS**
@require_POST
def like(request,article_pk):
article = get_object_or_404(Article,pk=article_pk)
if request.user.is_authenticated:
if article.like_users.filter(pk=request.user.pk).exists():
article.like_users.remove(request.user)
else:
article.like_users.add(request.user)
return redirect('articles:index')
return redirect('accounts:login')
Article.objects.get(pk=article_pk)
Model.objects.get ์กฐํํ๋ ๊ฒ๊ณผ
get404 ์ฐจ์ด๋ ํด๋นํ๋ ๊ฐ์ด ์์ผ๋ฉด ์ค๋ฅ // 404 not found ์ฐจ์ด
ํ์ฌ ์์ฒญ์ ๋ณด๋ธ ์ ์ ๊ฐ ์ด๋ฏธ ์ด ๊ฒ์๊ธ์ ์ข์์๋ฅผ ๋๋ฅธ ์ ์ด ์๋ค๋ฉด?
๊ทธ๋ผ ๊ด๊ณ๋ฅผ ๋๋๋ค.
**INDEX**
<form action="{% url 'articles:like' article.pk %}" method='POST'>
{% csrf_token %}
{% if request.user in article.like_users.all %}
<button class='far fa-thumbs-up btn text-danger'></button>
{% else %}
<button class='fas fa-thumbs-up btn text-danger'></button>
{% endif %}
</form>
<p>{{article.like_users.all|length}}๋ช
์ <i class="fas fa-thumbs-up"></i></p>