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
конструктор.