Модель Django не сохраняет POST ajax-запрос
Моя модель Django не сохраняет ответ даже после получения POST-запроса. Я пытаюсь создать базовый счетчик "нравится - не нравится" и у меня возникают проблемы с обновлением значения "нравится" в базе данных. Хотя я отправляю POST ответ в функцию likePost в view.py, я не могу обновить поле like_votes в модели Post.
Моя модель
class Post(models.Model):
post_text = models.CharField(max_length=1000)
pub_date = models.DateTimeField('date published')
like_votes = models.IntegerField(default=0)
dislike_votes = models.IntegerField(default=0)
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
def __str__(self):
return self.post_text
Моя ajax функция
<script type="text/javascript">
var likebtn = document.getElementById("likebtn");
likebtn.addEventListener('click', buttonClikckHandler);
var num1 = 1;
var like = parseInt("{{post.like_votes}}");
var new_l = like;
function buttonClikckHandler() {
console.log("clicked like");
const xhr = new XMLHttpRequest();
var new_l = like + num1 % 2;
num1 = num1 + 1;
document.getElementById("like").innerHTML = new_l;
var catid;
catid = $(this).attr("data-catid");
$.ajax(
{
type: "GET",
url: "/likepost",
data: {
post_id: catid ,
votes : new_l
},
success: function (data) {
$('#like' + catid).remove();
$('#message').text(data);
}
})
console.log(new_l, num1);
}
</script>
Views.py
def likePost(request ):
if request.method == 'POST':
post_id = request.POST['post_id']
print( post_id)
likedpost = Post.objects.get(pk=post_id)
#m = Like(post=likedpost)
likedpost.like_votes = int(request.POST['votes'])
likedpost.save()
#m.save()
return HttpResponse("Success!")
else:
return HttpResponse("Request method is not a POST")
Вы допустили ошибку в коде JS. Ajax вызов должен быть POST
вместо GET
.
$.ajax({
type: "POST",
url: "/likepost",
data: {
post_id: catid,
votes: new_l,
},
success: function (data) {
$("#like" + catid).remove();
$("#message").text(data);
},
});