迭代GQL查询字段

时间:2013-04-21 03:06:07

标签: google-app-engine python-2.7 google-cloud-datastore jinja2 webapp2

我正在尝试为Google应用引擎数据存储区中的实体实施“修改”功能。因此,如果为数据存储区实体指定了密钥,我希望使用与此密钥关联的值填充表单。如果未指定任何键,则将从先前的表单后期尝试中提取这些值。虽然我能够使用self.request.arguments()遍历self.request字段,但我不知道如何使用数据存储区(db.get(key))对象执行此操作。

所以如果可能的话,请告诉我,或者即使我处理了我的gae表格处理。

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()

谢谢

1 个答案:

答案 0 :(得分: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)