2012-04-21 102 views
1

我已閱讀,閱讀並重新閱讀文檔,並在Web上進行了許多搜索,但我還不明白爲什麼我的應用無法正常工作。 當用戶連接時,他必須完成一個表單。這個代碼適用。當用戶註銷然後登錄時,表單字段會填入他的信息。所以,數據被正確保存。但是,當用戶更改表單字段值並提交表單時,數據不會更新。帶Google的Google App Engine:無法更新數據實體

我的模型:

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(account = user)'創建了一個新實體,而不是使用'm = member.get()' – aschmid00 2012-04-21 15:08:48

+0

非常感謝。我的問題解決了。 – tsil 2012-04-21 15:28:16

回答

3

的問題是要添加一個新的記錄,而不是更新現有記錄。爲了您的代碼,最簡單的解決將是改變這一點:

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

到:

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

的原因,你的代碼是更新現有的記錄是因爲你還沒有分配的關鍵。要了解更多關於鑰匙的信息,你可以在Kinds and Identifiers中閱讀。

+0

或使它更可讀'member.get()'而不是'member [0]' – aschmid00 2012-04-21 15:03:09