Google アプリ エンジン データストア内のエンティティの「編集」機能を実装しようとしています。そのため、データストア エンティティにキーが指定されている場合、このキーに関連付けられた値をフォームに入力したいと考えています。キーが指定されていない場合、これらの値は前回のフォーム ポスト試行から取得されます。self.request.arguments() で self.request フィールドをループすることはできますが、データストア (db.get(key)) オブジェクトでこれを行う方法がわかりません。
それで、これが可能かどうか、またはゲーフォームの処理がうまくいかない場合でもお知らせください。
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()
ありがとうございました