0

我正在使用 WTForms 的 App Engine 扩展从我的数据存储模型生成表单。这对于添加新实体非常有用,但我也希望能够使用表单来编辑现有实体。

是否可以将现有数据存储实体加载到使用 GAE 数据存储模型中的 model_forms 创建的表单中?如果是这样,我该怎么做?如果没有,我应该采取什么方法来实现这一点?

4

1 回答 1

0

这是我更新谷歌数据存储的版本。

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

于 2013-03-27T10:51:38.537 回答