我无法使用python / ndb从GAE中的键中删除实体。我能够从页面中检索实体(问题)密钥,但无法弄清楚如何将其删除。 GAE支持页面说它就像检索密钥然后删除密钥一样简单,如下所示。
problem = problem_key.get()
problem.key.delete()
但这不起作用。我非常确定正确获得密钥。 HTML看起来像
{%for problem in problems %}
<tr>
<td>{{ problem.tags }}</td>
<td><script type="math/tex">{{ problem.content }}</script></td>
<td>{{ problem.answer }}</td>
<td>{{ problem.quiz }}</td>
<td>{{ problem.id }}</td>
<td>{{ problem.date }}</td>
<form action="/deleteProblem" method="POST">
<td><button type="submit" name="problem_key" value="{{ problem.key }}">Delete Problem</button></td>
</form>
</tr>
{% endfor %}
我的python代码如下:
class deleteHandler(BaseHandler):
def post(self):
prob_key = self.request.get('problem_key')
problem = prob_key.get()
problem.key.delete()
self.redirect("/")
我得到了:
problem = prob_key.get()
AttributeError: 'unicode' object has no attribute 'get'
我最好的猜测是,prob_key被分配了实际的unicode,因此当然没有get()
方法,但我不明白如何根据Google的问题解决问题解释它应该如何运作。
编辑:好的,一直在侦察一下,我已经改变了这一行:
prob_key = self.request.get('problem_key')
到
prob_key = ndb.Key('Problem', int(self.request.get('problem_id')
因为据我所知,可以按以下方式构建密钥
ndb.Key('kind', 'id')
不幸的是,我仍然无法让它发挥作用。我现在正在
problem.key.delete()
AttributeError: NoneType has no attribute 'key'