2017-02-22 12 views
0
キー

からエンティティを削除します。エンティティ(問題)キーをページから取得できますが、削除する方法を把握することはできません。 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' 
+0

実際のKeyオブジェクトを渡していません。渡された文字列からKeyオブジェクトを作成し、次に削除操作を行います。 –

+0

そして、キーオブジェクトを取得したら、実際のモデルインスタンスを取得する必要はありません。そのキーで直接deleteを呼び出すだけです。 –

+0

@AvinashRaj私はそれを得ようとしました、それは動作させることができませんでした。私は編集したものを追加しました – quest2graduate18

答えて

0

を取得しています。

次のようにだからあなたのHTMLに、文字列表現を表示:Retrieving Entities from Keysから

prob_key = ndb.Key(urlsafe=self.request.get('problem_key')) 

value="{{ problem.key.urlsafe() }}" 

そして、あなたのハンドラのコードでは、その文字列表現からキーを復元

You can also use an entity's key to obtain an encoded string suitable for embedding in a URL:

url_string = sandy_key.urlsafe() 

This produces a result like agVoZWxsb3IPCxIHQWNjb3VudBiZiwIM which can later be used to reconstruct the key and retrieve the original entity:

sandy_key = ndb.Key(urlsafe=url_string) 
sandy = sandy_key.get() 
+0

テンプレート構文エラーが発生しました。これと何か関係があるかどうかは分かりませんが、webapp2を使用しています。私の質問を編集した管理者がDjangoにタグを付けました。 – quest2graduate18

+0

おそらくテンプレート自体に 'urlsafe()'を呼び出そうとしているので、私はそれがhttp://stackoverflow.com/questions/5190204/is-it-possible-to-accessに基づいてこれと同じように動作すると仮定しましたオブジェクトの中のキー名オブジェクトの内側にあるテンプレートです。 'problem.key.urlsafe'も試してみてください(本当にdjangoテンプレートの場合)。個人的に私はテンプレート内のオブジェクトメソッドを呼び出さず、テンプレートに渡す前に結果をサニタイズすることができるハンドラコードで行います。同様に、 'problem'のクラスに' @ property'を追加して、 'self.key.urlsafe()'を返してもいいでしょう。 –

+0

これはうまくいった!どうもありがとうございました – quest2graduate18

関連する問題