2017-09-30 49 views
0

我正在Flask中构建一个网站。我做了一个表单,它接受输入并从数据库中呈现记录。我需要帮助处理对从数据库中检索到的记录所做的任何更改。例如,如果用户在星期一输入1pm,星期日输入2pm。表单将处理输入并显示它。但如果我想改变下午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')) 

回答

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')) 
+0

它的工作原理。我可以在日程表中更改一行!我要添加一些代码来生成更多的行并进行调整以适应它们。但是非常感谢你。在我即将失去对StackOverflow的信心时,你给了我一个很好的答复。 – Eden

+0

@伊登 - 请接受这个答案。 – Martlark

0

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

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

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

希望有所帮助。

+0

您的解决方案也适用。但是现在我无法让它与多行一起工作。每当对第1行进行更改时,它也会更改第2行。我不希望它这样做。我希望每行中的数据根据​​用户所做的任何输入更改而独立更改。我不知道这种类型的问题谷歌适当的搜索条件。任何帮助表示赞赏。 – Eden

+0

什么意思是“每当对第1行进行更改时,它也会更改第2行?”请提供更多信息以及某些特定用例作为示例 –

+0

好的,下面是我的模板查找schedule.html的方式:(https://imagebin.ca/v/3cXBfCXVk7UQ)。首先,出于某种原因,出现在计划中的员工数量是重复的。但无论如何,只要我对第一行进行更改,它也会更改第二行。我希望独立进行更改。 – Eden

相关问题