2012-04-21 20 views
1

私はこのドキュメントを再度読んだり読んだり読んだり、Web上で多くの検索を行ったりしていますが、なぜ私のアプリケーションが正しく動作しないのか分かりません。 ユーザーが接続すると、フォームを記入する必要があります。このコードは動作します。ユーザーがログアウトしてからログインすると、フォームフィールドに情報が入力されます。したがって、データは正しく保存されます。しかし、ユーザーがフォームフィールド値を変更してフォームを送信すると、データは更新されません。Google App Engine with Python:データエンティティを更新することができません

マイモデル:

class Members(db.Model): 
    account = db.UserProperty() 
    hashtags = db.StringProperty() 

ここではフォームを送信するクラス:

class Submit(webapp.RequestHandler): 
def post(self): 
    user = users.get_current_user() 

    if user: 
     url = users.create_logout_url('/') 
     url_linktext = 'Logout' 

     member = db.GqlQuery("SELECT * FROM Members WHERE account = :1", user) 

     if member.count(1) > 0: 
      m = Members(account=user) 
      m.hashtags = ','.join([ 
       self.request.get('hashtag1'), 
       self.request.get('hashtag2'), 
       self.request.get('hashtag3')]) 
      m.put() 
     else: 
      member = Members() 
      member.account = user 
      member.hashtags = ','.join([ 
       self.request.get('hashtag1'), 
       self.request.get('hashtag2'), 
       self.request.get('hashtag3')]) 
      member.put() 

     self.redirect('/') 
    else: 
     self.redirect('/') 
+1

基本的に何が起こっているかは、メンバーを更新する前にメンバーを取得していないことです。 gqlqueryを使用して既存のメンバーがあるかどうかを確認していますが、 'm = member.get() 'の代わりに' m = Member(account = user) 'を使用して新しいエンティティを作成します。 – aschmid00

+0

ありがとうございました。私の問題は解決されました。 – tsil

答えて

3

問題は、あなたが新しいレコードを追加する代わりに、既存のレコードを更新しているです。あなたのコードのために、最も簡単な修正は、これを変更するには、次のようになります。

if member.count(1) > 0: 
    m = Members(account=user) 

へ:キーを割り当てていないので、あなたのコードは、既存のレコードを更新している

if member.count(1) > 0: 
    m = member[0] 

理由があります。鍵の詳細については、Kinds and Identifiersで読むことができます。

+0

にするか、 'member [0]'の代わりに 'member.get()'を読みやすくする – aschmid00

関連する問題