Flask: обновление существующих данных из базы данных - PullRequest
0 голосов
/ 14 апреля 2020

Для следующей модели и маршрута, как я могу заставить страницу отображать существующие данные в поле базы данных, в редактируемом окне, с кнопкой «сохранить изменения».

# MODEL
class Task(db.Model): #inherits from db>Model
    __tablename__ = "Tasks"

    id = db.Column(db.Integer, primary_key=True)
    # datetime, need to work this out
    Title = db.Column(db.String(4096))
    Status = db.Column(db.String(4096))
    Description = db.Column(db.String(4096))
    Priority = db.Column(db.String(4096))
    Assigned_To = db.Column(db.String(4096))

# ROUTE:
@app.route("/<int:task_id>/edit")
def _edit(task_id):
    task = Task.query.get_or_404(task_id)
    return render_template('update.html',task=task)
<—- update.html—->
<form method="POST" action="">
            <fieldset>
             {{ task.Title }}
             {{ task.Description }}
            </fieldset>
        </form>

Я бы предпочел не определять формы, если это возможно. У меня настроена и работает база данных SQL Alchemy.

Маршруты, добавленные в конец этого вопроса, работают нормально - добавление новых задач (строк) в базу данных и создание отдельных страниц для просмотра отдельных задач (строк) ):


@app.route("/tasks", methods=['GET', 'POST'])
def new_post():
    if request.method == "GET":
        return render_template("tasks.html")
    data = Task(
        Title=request.form["title"],
        Description=request.form["description"],
        Status=request.form["status"],
        Priority=request.form["priority"],
        Assigned_To=request.form["assigned"],
        )
    db.session.add(data)
    db.session.commit()
    return redirect(url_for('index'))

@app.route("/<int:task_id>")
def qtsk(task_id):
    task = Task.query.get_or_404(task_id)
    return render_template('indtask.html',task=task)

Я новичок в flask, я был бы очень признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Я задавал подобный вопрос. Я думаю, что вы можете обновить с помощью формы. Это не должно быть представлено как форма для пользователя. Вы можете написать шаблон html, который не будет похож на форму, но вам понадобится форма для извлечения данных. Может быть, вы можете использовать javascript, а затем вы можете пропустить использование формы. Я вспомнил, как использовать javascrip для моего приложения.

0 голосов
/ 14 апреля 2020

Недавно я смотрел учебник Flask, и вот как он справляется с этой ситуацией:

@app.route("/post/<int:post_id>/update", methods=["GET", "POST"])
@login_required
def update_post(post_id):
    post = Post.query.get_or_404(post_id)
    if (post.author != current_user):
        abort(403)
    form = PostForm()
    if form.validate_on_submit():
        post.title = form.title.data
        post.content = form.content.data
        db.session.commit()
        flash('Your post has been updated!', 'success')
        return redirect(url_for('post', post_id=post_id))
    elif request.method == 'GET':
        form.title.data = post.title
        form.content.data = post.content
    return render_template('create_post.html', title="Update Post", 
                            form=form, legend='Update Post')

Что он делает, проверяет, отправляет ли пользователь обновленный заголовок или контент, используя метод POST , Если пользователь тогда просто обновляет поле и затем фиксирует его. В противном случае верните шаблон с полем заголовка и содержимого в форме, заполненной текущими полями в объекте Post.

Вот ссылка на этот учебник (эта часть начинается в 25:35): https://youtu.be/u0oDDZrDz9U

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...