WTForms の App Engine 拡張機能を使用して、データストア モデルからフォームを生成しています。これは新しいエンティティを追加するのに最適ですが、フォームを使用して既存のエンティティを編集できるようにしたいと考えています。
既存のデータストア エンティティを、GAE データストア モデルから model_forms で作成されたフォームにロードすることはできますか? もしそうなら、どうすればいいですか?そうでない場合、これを達成するためにどのようなアプローチをとるべきですか?
WTForms の App Engine 拡張機能を使用して、データストア モデルからフォームを生成しています。これは新しいエンティティを追加するのに最適ですが、フォームを使用して既存のエンティティを編集できるようにしたいと考えています。
既存のデータストア エンティティを、GAE データストア モデルから model_forms で作成されたフォームにロードすることはできますか? もしそうなら、どうすればいいですか?そうでない場合、これを達成するためにどのようなアプローチをとるべきですか?
これは、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() を呼び出します。