Я работаю над проектом django reddit clone, просто чтобы улучшить свои навыки. Я хотел реализовать AJAX, чтобы страница не обновлялась sh, когда кто-то голосует против. Я создал API с django каркасом отдыха, который имеет логические значения с повышенными и пониженными значениями. Тем не менее, когда я пытаюсь изменить значение upvoted на false в моем javascript, оно не работает, но при изменении значения false на true работает и обновляется шаблон. Это, вероятно, сбивает с толку, так что вот какой-то код.
class UpvoteAPIToggle(APIView):
def get(self, request, id=None, format=None):
post = Post.objects.get(id=id)
all_post_upvotes = post.upvotes.all()
all_post_downvotes = post.downvotes.all()
profile = Profile.objects.get(user=self.request.user)
upvoted = False
downvoted = False
if profile not in all_post_upvotes:
post.upvotes.add(profile)
downvoted = False
if profile in all_post_downvotes:
post.upvotes.remove(profile)
upvoted = False
downvoted = True
else:
post.downvotes.remove(profile)
upvoted = True
serializer = PostSerializer(all_post_upvotes, many=True, read_only=True)
serialized_upvotes = serializers.serialize("json", all_post_upvotes)
upvote_counter = 0
data = {
"upvoted":upvoted,
"downvoted": downvoted,
"all_post_upvotes":serialized_upvotes,
"upvote_counter":upvote_counter
}
return Response(data)
это основанное на классе представление покоя.
$.ajax({
url: upvoteUrl,
data: {},
dataType: "json",
success:
(data)=>{
checkVote(data)
}
})
function checkVote(data){
if (data.upvoted){
data.upvote_counter--;
data.upvoted = false
}else{
data.upvote_counter++;
data.upvoted = true
$(".upvote-btn").css("color","orange");
$("#upvoteCounter").text(data.upvote_counter)
}
}
Вот часть jquery из шаблона. Он вызывается при нажатии кнопки upvote. Я повторю это еще раз, чтобы напомнить вам, что когда за него не проголосовали, и вы щелкаете, оно превращается в истину, наоборот, не работает, когда это правда, оно остается верным.