Форум сайта python.su
Есть класс наследуемый от MethodViews. Соответственно он реализует: get, post, put, delete, только они и нужны для взаимодействия с объектами. Проблема в следующем: при попытке сделать так:
{% set form = '<form action="' ~ link ~ '" method="delete">' %}
Офлайн
Метод у формы может быть либо get либо post. Используете post для процедуры изменения, удаления или добавления объектов.
Офлайн
Без js никак
Офлайн
Наделал такой гадости
class BaseView: def __init__(self, _class, _form, template_name, end_point=''): self.cls = _class self.form = _form self.template = template_name self.endpoint = end_point self.init_end_points() def init_end_points(self): app.add_url_rule('/%s/' % self.endpoint, endpoint='%s' % self.endpoint, view_func=self.all, methods=['GET']) app.add_url_rule('/%s/add/' % self.endpoint, endpoint='%s_add' % self.endpoint, view_func=self.add, methods=['POST']) app.add_url_rule('/%s/edit/<int:id>' % self.endpoint, endpoint='%s_edit' % self.endpoint, view_func=self.edit, methods=['POST']) app.add_url_rule('/%s/delete/<int:id>' % self.endpoint, endpoint='%s_delete' % self.endpoint, view_func=self.delete, methods=['POST']) def redirect(self): return redirect(self.endpoint) def all(self): results = list() for instance in db.session.query(self.cls).limit(OBJECT_PER_PAGE): results.append((instance, self.form(obj=instance))) # form to add new inst editor = self.form() return render_template(self.template, objects=results, form=editor) def edit(self, id): instance = db.session.query(self.cls).get(id) form = self.form(request.form, self.cls) if form.validate_on_submit(): form.populate_obj(instance) db.session.commit() flash_edit(instance) else: flash_form_errors(form) return self.redirect() def add(self): form = self.form(request.form, self.cls) instance = self.cls() if form.validate_on_submit(): form.populate_obj(instance) db.session.add(instance) db.session.commit() flash_add(instance) else: flash_form_errors(form) return self.redirect() def delete(self, id): instance = db.session.query(self.cls).get(id) db.session.query(self.cls).filter(self.cls.id == id).delete() flash_delete(instance) db.session.commit() return self.redirect()
Офлайн
Жуть. Посмотрите в сторону Flask-Classy чтобы такого не городить.
Офлайн