我正在使用WTForms的App Engine扩展来从我的数据存储模型生成表单。这非常适合添加新实体,但我也希望能够使用这些表单来编辑现有实体。
是否可以将现有数据存储区实体加载到使用GAE数据存储区模型中的model_forms创建的表单中?如果是这样,我该怎么做?如果没有,我应采取什么方法来实现这一目标?
答案 0 :(得分:0)
这是我更新Google数据存储区的版本。
class AdminBlogEdit(MethodView):
def __init__(self):
self.blog_form = NewBlogEntryForm(csrf_enabled=False)
def get(self,blog_key_id=None):
if blog_key_id:
self.blog_model = BlogEntryModel.get_by_id(blog_key_id)
self.blog_form = NewBlogEntryForm(obj = self.blog_model)
return render_template('admin/blog_edit.html', form=self.blog_form)
def post(self,blog_key_id=None):
if self.blog_form.validate():
self.update_post(blog_key_id)
self.blog_model.put()
return redirect(url_for(".admin"))
else:
return render_template('admin/blog_edit.html', form=self.blog_form)
return redirect(url_for(".admin"))
def update_post(self,blog_key_id):
if blog_key_id:
self.blog_model = BlogEntryModel.get_by_id(blog_key_id)
self.blog_form.populate_obj(self.blog_model)
else:
self.blog_model = BlogEntryModel(title = self.blog_form.title.data, date_created = self.blog_form.date_created.data,
entry = self.blog_form.entry.data)
主要思想是在显示GET请求之前检索数据存储区实体并填充表单数据。
对于PUT请求,再次检索数据存储实体并使用表单数据更新它,然后在其上调用datastoremodel.put()