Как увеличить количество лайков

Как увеличить количество лайков в моделях ответов. Я хочу, чтобы когда пользователь разместил ответ, некоторые пользователи в приложении могли бы его лайкнуть, как система лайков в социальных сетях, есть ли кто-нибудь, кто может показать мне, как увеличить количество лайков в моих представлениях и шаблоне? Я действительно не знаю, как использовать функцию 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)
Вернуться на верх