からエンティティを削除します。エンティティ(問題)キーをページから取得できますが、削除する方法を把握することはできません。 GAEのサポートページには、以下のように、キーを取得して削除するだけの簡単な手順が記載されています。GAE - トラブル私はトラブルのpython/NDBを使って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のコードは次のようになります。私の最高の推測では、prob_keyは、実際のUnicodeを割り当てられてきているということである
problem = prob_key.get()
AttributeError: 'unicode' object has no attribute 'get'
と:
class deleteHandler(BaseHandler):
def post(self):
prob_key = self.request.get('problem_key')
problem = prob_key.get()
problem.key.delete()
self.redirect("/")
私は取得していますもちろん、get()
メソッドはありませんが、どのように機能するべきかGoogleの説明に基づいて問題を解決する方法はわかりません。
EDIT:さて、しばらくの間、周りにスカウトされて、私はこの行を変更しました:
prob_key = self.request.get('problem_key')
限り、私はそれを理解して、キーを構築することができるので、
prob_key = ndb.Key('Problem', int(self.request.get('problem_id')
へ次のようにしてください。
ndb.Key('kind', 'id')
残念ながら、私はまだそれを動作させることができません。私は今あなたがHTMLページを介してキーオブジェクト自体を渡すことはできませんが、あなたはその.urlsafe()
文字列表現を渡すことができ
problem.key.delete()
AttributeError: NoneType has no attribute 'key'
実際のKeyオブジェクトを渡していません。渡された文字列からKeyオブジェクトを作成し、次に削除操作を行います。 –
そして、キーオブジェクトを取得したら、実際のモデルインスタンスを取得する必要はありません。そのキーで直接deleteを呼び出すだけです。 –
@AvinashRaj私はそれを得ようとしました、それは動作させることができませんでした。私は編集したものを追加しました – quest2graduate18