Как загрузить объект из хранилища данных App Engine в мою модель WTForms model_form?

Я использую расширение WTForms App Engine для создания форм из моделей хранилища данных. Это отлично работает для добавления новых объектов, но я также хотел бы иметь возможность использовать формы для редактирования существующих объектов.

Можно ли загрузить существующий объект хранилища данных в форму, созданную с помощью model_forms из модели хранилища данных GAE? Если да, то как мне это сделать? Если нет, то какой подход я должен использовать для достижения этой цели?


person raddevon    schedule 22.03.2013    source источник


Ответы (1)


Это моя версия обновления хранилища данных 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().

person NullPoint10    schedule 27.03.2013
comment
Вот волшебство, которого мне не хватало: obj = self.blog_model. Спасибо за вашу помощь! - person raddevon; 29.03.2013