Google App Engine- как удалить один объект, если у вас есть идентификатор для этого объекта в Python

Я строю блог, используя GAE. Я хотел бы удалить определенные сообщения, хранящиеся в хранилище данных с идентификатором ключа. Мой код..

#my db model
class Post(db.Model):
subject = db.StringProperty(required = True)
content = db.TextProperty(required = True)
created = db.DateTimeProperty(auto_now_add = True)
lastmodified = db.DateTimeProperty(auto_now = True)

#my delete post handler
class DeletePost(Bloghandler):
    def post(self):
        key = self.request.get('id')

#my html form which passes the ID of the entity.
<form method="post" class="button-link" action="http://localhost:8080/blog/delete">
<input type="hidden" name="id" value={{p.Key().id()}}>
<input type="submit" name="delete" value="Delete">
</form><br><br>

Существовал аналогичный пост для удаления объектов, в которых был задействован Blobstore, что затрудняло отслеживание и реализацию. Любая помощь будет принята с благодарностью!:)

2 ответа

Решение

db.delete(ключ)

Я не очень понимаю ваш вопрос, кроме этого. Если у вас есть ключ, просто позвоните в db.delete, используя указанный ключ.

что еще вам нужно (если мне было непонятно, о чем вы спрашивали)?

Нет необходимости на самом деле получать объект из хранилища данных, чтобы удалить его. Поскольку у вас есть идентификатор ключа, вы можете просто создать его вручную, используя Key.from_path

class DeletePost(Bloghandler):
  def post(self):
    key_id = self.request.get('id')
    db.delete(db.Key.from_path('Post', key_id))

Обратите внимание, что это и другие предложенные решения не помогут, если вы добавите родительский элемент к своему ключу, что может быть важно, когда вы начнете думать о своей модели согласованности.

Вместо этого вы должны использовать сериализованную версию вашего ключа:

class DeletePost(Bloghandler):
    def post(self):
        key = db.Key(encoded=self.request.get('id'))
        db.delete(key)

<form method="post" class="button-link" action="http://localhost:8080/blog/delete">
<input type="hidden" name="id" value={{p.key()}}>
<input type="submit" name="delete" value="Delete">
</form><br><br>

Как описано здесь, используя str() на db.Key вернет кодовую строку urlsafe ключа, которая затем может быть прочитана Key конструктор.

Другие вопросы по тегам