Как увеличить переменную базы данных на 1 с помощью метода put в JS?

Я делаю веб-приложение, похожее на twitter, которое позволяет пользователям ставить лайк на сообщение.

Для внесения изменений в базу данных я создал API, который позволяет использовать методы GET, PUT или POST для доступа к базе данных или внесения в нее изменений.

Я использую базу данных Django Framework и использую javascript для отправки запросов на получение API.

Моя проблема заключается в том, что я пытаюсь использовать метод put для установки атрибута "likes" сообщения равным на 1 больше, чем предыдущее количество лайков, которое было у сообщения. Я не знаю, как это сделать.

Ниже приведена моя функция javascript, которая запускается после того, как пост понравился. Я попытался получить доступ к количеству лайков у сообщения и установить его равным переменной. Однако это не работает.

function likePost(postID) {
  var postLikes;
  fetch('/posts/' + postID)
    .then(response => response.json())
    .then(post => {
      postlikes = post.likes
    })
  fetch('/posts/' + postID, {
    method: 'PUT',
    body: JSON.stringify({
      likes: postLikes++,
      liked: true
    })
  })
  console.log(postLikes)
}

По какой-то причине console.log возвращает NotaNumber, что означает, что postlikes не устанавливается равным post.likes и никогда не инстанцируется. Таким образом, "likes" никогда не устанавливается равным postLikes++ в методе PUT.

Это мой файл Models.py, который определяет базу данных

class Post(models.Model):
body = models.TextField(max_length=1000)
creator = models.ForeignKey(User, on_delete=models.CASCADE, related_name="posts")
timeStamp = models.DateTimeField(auto_now_add=True)
likes = models.IntegerField()
liked = models.BooleanField(default=False)

def serialize(self):
    return{
        "id": self.id,
        "creator": self.creator.username,
        "body": self.body,
        "timeStamp": self.timeStamp.strftime("%b %d %Y, %I:%M %p"),
        "likes": self.likes,
        "liked": self.liked
    }

Это мой файл urls.py, в котором определены маршруты API

urlpatterns = [
path("", views.index, name="index"),
path("create_post", views.create_post, name="create_post"),
path("login", views.login_view, name="login"),
path("logout", views.logout_view, name="logout"),
path("register", views.register, name="register"),
path("test", views.test, name="test"),

#API routes
path("posts/<int:post_id>", views.post, name="post"),
path("posts", views.all_posts, name="all_posts")
]
Вернуться на верх