如何将App Engine数据存储中的实体加载到我的WTForms model_form中?

时间:2013-03-22 15:43:51

标签: python google-app-engine google-cloud-datastore wtforms

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

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

1 个答案:

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