我正在尝试为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()
谢谢
答案 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)