如何提交对数据库的内联编辑

时间:2017-09-30 21:52:52

标签: python flask sqlalchemy

我正在Flask建立一个网站。我创建了一个表单,它接受输入并从数据库中呈现记录。我需要帮助处理对它从数据库中检索的记录所做的任何更改。例如,如果用户在周一下午1点和周日下午2点输入。表单将处理输入并显示它。但如果我想改变下午1点到下午3点,我不能。它允许我进行内联编辑,但不会将更改提交到数据库。 以下文件如下:

schedule.html:

                 {% for r in result %}
                  <div class="form-inline">

                    <form class="form-schedule" method="post" action="/schedule/update">
                      <div class="form-group">
                        <input type="text" id="inputMonday" name="monday" class="form-control" value="{{ r.monday }}" required autofocus>
                      <div class="form-group">
                        <input type="text" id="inputSunday" name="sunday" class="form-control" value="{{ r.sunday }}" required autofocus>
                      </div>
                      {% endfor %}
                      </br>
                      <button class="btn btn-lg btn-primary" type="submit">Save</button>
                    </form>

views.py:

@home.route('/schedule')
@login_required
def schedule():
    """
    Render the schedule template on the /schedule route
    """
    result = Schedule.query.filter_by(persons_id = current_user.id)

    return render_template('home/schedule.html', title="Schedule", result=result)

@home.route('/schedule/update', methods=['POST', 'GET'])
@login_required
def schedule_update():
    """
    Process the schedule then render schedule route
    """
    monday = request.form['monday']
    sunday = request.form['sunday']
    persons_id = 1
    employees_id = 1

    days = Schedule(monday=monday, sunday=sunday, persons_id=persons_id, employees_id=employees_id)
    db.session.add(days)
    db.session.commit()
    return redirect(url_for('home.schedule'))

2 个答案:

答案 0 :(得分:1)

您的问题是您在保存之前没有从数据库中读取计划。使用query.get方法从数据库中读取它。在表单中添加一个ID,如下所示:

<input type="hidden" name="id" value="{{r.id}}">

然后在schedule_update方法中读取POST数据中的id。

schedule_id = request.form['id']
# read existing schedule from the database
days = Schedule.query.get(int(schedule_id))

if not days:
    abort(404)

days.monday = monday
days.sunday = sunday
days.persons_id = 1
days.employees_ie = 1

db.session.add(days)
db.session.commit()
return redirect(url_for('home.schedule'))

答案 1 :(得分:0)

您目前正在做的是创建一个新对象并将其保存到数据库中。您需要做的是从数据库中检索要编辑的对象,然后对该对象应用编辑。

day = db.session.query(Schedule).filter_by(id=id).first()

这应该查询数据库并获取对象。然后对此进行编辑,最后将其提交到数据库。

希望有所帮助。