我正在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'))
答案 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()
这应该查询数据库并获取对象。然后对此进行编辑,最后将其提交到数据库。
希望有所帮助。