статье, чтобы если он уже лайкнул то при повторном нажатии на лайк - лайк снимается
Попробовал такой способ, но чет не получилось
models.py
class Article(models.Model):
user = models.ForeignKey(User, blank=True, null=True)
title = models.CharField(max_length=128, blank=True, null=True)
post = models.TextField()
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
moderated = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Like(models.Model):
user = models.ForeignKey(User)
article = models.ForeignKey(Article)
likes_in_article = models.IntegerField(default=0)
liked = models.BooleanField(default=False)
views.py
def add_like(request, article_id):
article = get_object_or_404(Article, pk=article_id)
like = Like.objects.get_or_create(article=article, user=request.user)[0]
likes_in_article = article.likes
like.likes_in_article = likes_in_article
if like.liked:
like.likes_in_article -= 1
like.liked = False
else:
like.likes_in_article += 1
like.liked = True
like.save()
article.save()
return redirect("article", article_id=article_id)
Зачем хранить количество в поле статьи?
чёт ты намудрил во вью.. всё просто: 1) человек ставит лайк - создаешь запись в Likes 2) человек ставит дизлайк - создаешь запись в Likes 3) человек отменяет лайк/дизлайк - деактивируешь / удаляешь запись в Likes Дополнительно можно изменять Article.likes, если объект был создан / удалён, для лайков +1, для дизлайков -1, удалили -1.
Обсуждают сегодня