我正在使用 WTForms 的 App Engine 扩展从我的数据存储模型生成表单。这对于添加新实体非常有用,但我也希望能够使用表单来编辑现有实体。
是否可以将现有数据存储实体加载到使用 GAE 数据存储模型中的 model_forms 创建的表单中?如果是这样,我该怎么做?如果没有,我应该采取什么方法来实现这一点?
我正在使用 WTForms 的 App Engine 扩展从我的数据存储模型生成表单。这对于添加新实体非常有用,但我也希望能够使用表单来编辑现有实体。
是否可以将现有数据存储实体加载到使用 GAE 数据存储模型中的 model_forms 创建的表单中?如果是这样,我该怎么做?如果没有,我应该采取什么方法来实现这一点?
这是我更新谷歌数据存储的版本。
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()