0

我試圖在谷歌應用程序引擎數據存儲中爲實體實現「編輯」功能。因此,如果爲數據存儲實體指定了某個鍵,我想用與此鍵關聯的值填充表單。如果沒有指定密鑰,那麼這些值將從先前的表單發佈嘗試中拉出。雖然我能夠通過self.request.arguments()循環訪問self.request字段,但我不知道如何使用數據存儲(db.get(key))對象執行此操作。遍歷GQL查詢字段

所以請讓我知道如果這是可能的,或者即使我用我的表單處理的方式。

class ItemsPage(webapp2.RequestHandler): 
    def __init__(self, *args, **kwargs): 
     super(ItemsPage, self).__init__(*args, **kwargs) 
     self.formerrors = dict() 
     self.formdata = dict() 

    def get(self): 

     if self.request.get('key'): 
      # Key specified, get field values from db store 
      key = self.request.get('key') 
      item = db.get(key) 
      for field in item.arguments(): # THIS DOES NOT WORK 
       self.formdata[field] = item.field 
     else: 
      # No key specified, use the self.request values 
      for field in self.request.arguments(): # THIS DOES WORK 
       self.formdata[field] = self.request.get(field) 

     # render the template with the formdata 
     template_values = { 
          'formerrors': self.formerrors, 
          'formdata': self.formdata # Use formdata to populate form fields 
          } 
     template = JINJA_ENVIRONMENT.get_template(
          'templates/items.html' 
          ) 
     self.response.write(template.render(template_values)) 

    def post(self): 
     if self.validateSortForm(): 
      # Form input is valid, do some processing and then put into datastore 
      item = itemDatstore() 
      item.put() 
      self.redirect('/') 
     else(): 
      # Form input was not valid, redisplay the form 
      self.get() 

謝謝

+0

這是你想要的嗎? .properties()https://developers.google.com/appengine/docs/python/datastore/modelclass#Model_properties要考慮的另一件事是get的結果可能是None。 – marcadian 2013-04-21 04:15:53

回答

1

感謝您的幫助marcadian,這讓我在正確的道路上。由於文檔說

Model.properties()

返回所有這個模型類中定義的屬性的字典。

所以我從google.appengine.ext調用一個db.Model對象的properties(),並獲得所有可以遍歷的屬性的字典。

if self.request.get('key'): 
    # Key specified, get field values from db store 
    key = self.request.get('key') 
    sort = db.get(key) 
    for field in ItemDB.properties(): 
     self.formdata[field] = getattr(sort, field)