我在使用python/ndb從GAE中的密鑰刪除實體時遇到問題。我能夠從頁面檢索實體(問題)鍵,但無法弄清楚如何讓它刪除。 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()
的方法,但我不明白如何解決這個問題的基礎上谷歌的解釋應該如何運作。
編輯:好的,跑遍了一段時間了,我已經改變了這一行:
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'
您尚未傳遞實際的Key對象。從傳遞的字符串中創建一個Key對象,然後執行刪除操作。 –
一旦你有一個關鍵對象,你不需要得到實際的模型實例;只需直接在密鑰上調用delete即可。 –
@AvinashRaj我試圖得到它,不能讓它工作。我添加了我嘗試編輯的內容 – quest2graduate18