Как увеличить количество лайков
Как увеличить количество лайков в моделях ответов. Я хочу, чтобы когда пользователь разместил ответ, некоторые пользователи в приложении могли бы его лайкнуть, как система лайков в социальных сетях, есть ли кто-нибудь, кто может показать мне, как увеличить количество лайков в моих представлениях и шаблоне? Я действительно не знаю, как использовать функцию count() в представлениях и шаблоне, так что это моя первая попытка добавить систему лайков в приложение django.
class Answer(models.Model):
user = models.ForeignKey(User, blank=False, null=False, on_delete=models.CASCADE)
answer = RichTextField(blank=False, null=False)
post = models.ForeignKey(Question, blank=False, null=False, on_delete=models.CASCADE)
def __str__(self):
return str(self.user)
моя любимая модель:
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Answer, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.user)
мои взгляды:
def viewQuestion(request, slug):
question = get_object_or_404(Question, slug=slug)
answers = Answer.objects.filter(post_id=question)
context = {'question':question, 'answers':answers}
return render(request, 'viewQuestion.html', context)
мой шаблон viewQuestion:
<div class="container">
{% for answer in answers %}
<div class="row justify-content-center">
<div class="card my-2">
<div class="card-header">
Answer
</div>
<div class="card-body">
<h5 class="card-title">From: {{answer.user.username.upper}}</h5>
<p class="card-text">{{answer.answer|safe}}</p>
</div>
</div>
</div>
{% endfor %}
ваш шаблон:
<head>
<script src="jquery-3.6.0.min.js"></script>
</head>
<div class="container">
{% for answer in answers %}
<div class="row justify-content-center">
<div class="card my-2">
<div class="card-header">
Answer
</div>
<div class="card-body">
<h5 class="card-title">From: {{answer.user.username.upper}}</h5>
<p class="card-text">{{answer.answer|safe}}</p>
<br>
<span class="like" data-id="{{ answer.id }}">Like</span> # New
</div>
</div>
</div>
{% endfor %}
#to bottom of page
<script>
// AJAX CALL
$('.like').click(function(){
$.ajax({
type: "POST",
url: "{% url 'viewQuestion' %}", #call this view correctly
data: {'answer_id': $(this).attr('data-id'),'operation':'like_submit','csrfmiddlewaretoken': '{{ csrf_token }}'},
dataType: "json",
success: function(response) {
if(response.liked==true){
console.log("liked")
}
else if(response.liked==false){
console.log("unliked")
}
}
});
});
</script>
views.py
def viewQuestion(request, slug):
question = get_object_or_404(Question, slug=slug)
answers = Answer.objects.filter(post_id=question)
if request.method =="POST":
if request.POST.get("operation") == "like_submit":
answer_id=request.POST.get("content_id",None)
answer=get_object_or_404(Answer,pk=answer_id)
like, created = Like.objects.get_or_create(
user=request.user,post=answer)
if created:
JsonResponse({"liked":True})
else:
like.delete()
JsonResponse({"liked":False})
context = {'question':question, 'answers':answers}
return render(request, 'viewQuestion.html', context)