2017-09-30 7 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

これは機能します。私はスケジュール表の1行を変更することができます!私はいくつかのコードを追加して、より多くの行を生成し、それらのために働くよう調整します。しかし、本当にありがとう。私がStackOverflowを信用しなくなっていたときに、あなたは私に大きな返信をしました。 – Eden

+0

@エデン - この回答を受け入れてください。 – Martlark

0

あなたが現在やっていることは、新しいオブジェクトを作成してデータベースに保存することです。あなたがする必要があるのは、データベースから編集するオブジェクトを取り出して、そのオブジェクトに編集を適用することです。

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

これは、データベースを照会し、あなたのオブジェクトを取得する必要があります。そしてこれを編集し、最後にデータベースにコミットします。

希望に役立ちます。

+0

あなたのソリューションも機能します。しかし、今は複数の行を扱うのに問題があります。行1に変更が加えられたときは、行2も変更されます。その行為はしたくありません。ユーザーが入力した変更内容に基づいて、各行のデータを個別に変更する必要があります。私はこのタイプの問題のためにGoogleに適切な検索条件を知らない。どんな助けもありがとうございます。 – Eden

+0

「1行目に変更を加えたときに2行目も変更されたとき」とはどういう意味ですか? –

+0

例として、いくつかの具体的な使用例とともに詳細を提供してください。 :(https://imagebin.ca/v/3cXBfCXVk7UQ)。まず第一に、何らかの理由でスケジュールに登場する従業員の数が重複している。しかし、とにかく、最初の行を変更するたびに、2行目も変更されます。私は変更を独立して欲しい。 – Eden

関連する問題