Я создал кнопку «Мне нравится» для моего django блога, используя ajax, но я получаю сообщение об ошибке, что он не считается должным образом, сначала его 0, как в сообщении, когда я нажимаю, как он работает, 1, как появился с непохожим кнопка, но когда я нажимаю в отличие и снова нравится, это дает 2 лайка, а иногда, когда я в отличие от него, показывает -1, как я думаю, это jQuery проблема, я не эксперт в jQuery
jQuery коде
$(document).ready(function() {
function updateText(btn, newCount, verb) {
btn.text(newCount + " " + verb)
}
$(".like-btn").click(function(e) {
e.preventDefault()
var this_ = $(this)
var likeUrl = this_.attr("data-href")
var likeCount = parseInt(this_.attr("data-likes")) |0
var addLike = likeCount + 1
var removeLike = likeCount - 1
if (likeUrl){
$.ajax({
url: likeUrl,
method: "GET",
data: {},
success: function(data){
console.log(data)
var newLikes;
if (data.liked){
updateText(this_, addLike, "Unlike")
} else {
updateText(this_, removeLike, "Like")
// remove one like
}
}, error: function(error){
console.log(error)
console.log("error")
}
})
}
})
})
post_details. html:
{% if user not in post.likes.all %}
<p><a class='like-btn' data-href='{{ object.get_api_like_url }}'
data-likes='{{ object.likes.all.count }}' href='{{ object.get_like_url }}'>
{{ object.likes.all.count }} Like</a></p>
{% else %}
<p><a class='like-btn' data-href='{{ object.get_api_like_url }}'
data-likes='{{ object.likes.all.count }}' href='{{ object.get_like_url }}'>
{{ object.likes.all.count }} Unlike</a></p>
{% endif %}
View.py
class PostLikeToggle(RedirectView):
def get_redirect_url(self, *args, **kwargs):
obj = get_object_or_404(Post, pk=kwargs['pk'])
url_ = obj.get_absolute_url()
user = self.request.user
if user.is_authenticated:
if user in obj.likes.all():
obj.likes.remove(user)
else:
obj.likes.add(user)
return url_
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authentication, permissions
from django.contrib.auth.models import User
class PostLikeApiToggle(APIView):
authentication_classes = [authentication.SessionAuthentication]
permission_classes = [permissions.IsAuthenticated]
def get(self, request, pk, format=None):
obj = get_object_or_404(Post, pk=pk)
url_ = obj.get_absolute_url()
user = self.request.user
updated = False
liked =False
if user.is_authenticated:
if user in obj.likes.all():
liked = False
obj.likes.remove(user)
else:
liked = True
obj.likes.add(user)
updated = True
data = {
"updated":updated,
"liked":liked
}
return Response(data)
Models.py
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(User,on_delete=models.CASCADE)
likes =models.ManyToManyField(User,blank=True,related_name='post_likes')
content = models.TextField()
img = models.ImageField(upload_to='pics',blank=True)
time = models.DateTimeField(default=timezone.now)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('LoveTravel-Details', kwargs={'pk': self.pk})
def get_like_url(self):
return reverse('Like-Toggle', kwargs={'pk':self.pk})
def get_api_like_url(self):
return reverse('Like-Api-Toggle', kwargs={'pk':self.pk})