Javascript Кнопка "Нравится" Django не обновляет счетчик
Я создал Put request для обновления количества лайков, но когда я нажимаю кнопку like, количество не изменяется, пока я не обновлю страницу. и функция like/unlike работает нормально. Может ли кто-нибудь помочь мне решить эту проблему?
view.py. Вот как я выполнил запрос put.
class PostLikeView(APIView):
authentication_classes = [SessionAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request, post_id, slug=None, format=None):
post = Post.objects.get(pk=post_id)
serializer = PostSerializer(post, many=False, )
return JsonResponse(serializer.data, safe=False)
def put(self, request, post_id, slug=None, format=None):
post = Post.objects.get(pk=post_id)
user = self.request.user
# if user.is_authenticated():
if user in post.likes.all():
post.likes.remove(user.id)
else:
post.likes.add(user.id)
serializer = PostSerializer(post, data=request.data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, safe=False)
В javascript в like_button.addEventListener я вызываю функцию like post, где я передаю post_id эта функция работает, но счетчик не меняется пока я не обновлю страницу, могу ли я отредактировать так, чтобы счетчик обновлялся без обновления, если нет, то как настроить автоматическое обновление после завершения запроса put? index.js
Мне удалось решить свою проблему. Если кто-нибудь попадет в подобную ситуацию, сообщите мне. Возможно, это не самый элегантный способ решения проблемы, но он работает
// LIKE COUNTER
let likes_counter = post.likes.length
likesp.innerHTML = `Likes: ${likes_counter}`
if (document.querySelector("#user-id") != null) {
let user_id = document.querySelector("#user-id").value;
// LIKE BUTTON
let like_button = document.createElement('button')
like_button.setAttribute('id', 'like-button')
if (post.likes.indexOf(parseInt(user_id)) >= 0) {
like_button.innerHTML = 'Unlike'
} else {
like_button.innerHTML = 'Like'
}
like_button.setAttribute('type', 'submit')
like_button.addEventListener('click', () => {
if(like_button.innerText.toLowerCase() === 'like') {
like_button.innerText = 'Unlike';
likes_counter ++
}
else {
like_button.innerText = 'Like';
likes_counter --
}
likesp.innerHTML = `Likes: ${likes_counter}`
like_post(post_id, post.likes);
})
likesdiv.append(like_button)
}