次のように、Flask を使用して作成している投票アプリのデータベース スキーマを作成しました。
CREATE TABLE questions (
question_id integer primary key autoincrement,
questiontext string not null
);
CREATE TABLE choices (
choice_id integer primary key autoincrement,
choicetext string not null,
question_id integer,
FOREIGN KEY(question_id) REFERENCES questions(question_id)
);
しかし、どのように (HTML テンプレートで) 質問し、選択肢をデータベースに挿入するかを理解できませんでした。私の「show_polls」と「add_polls」は以下です
@app.route('/')
def show_polls():
cur = g.db.execute('SELECT questiontext, choicetext FROM questions q JOIN choices c ON c.question_id = q.question_id')
polls = [dict(question=row[0], choices=(c for c in row[1:])) for row in cur.fetchall()]
return render_template('show_polls.html', polls=polls)
@app.route('/add', methods=['POST'])
def add_poll():
if not session.get('logged_in'):
abort(401)
g.db.execute('insert into questions (questiontext) values (?)',
[request.form['questiontext']])
for i in range(4): #4 choices
g.db.execute('insert into choices (choicetext, question_id) values(?, ?)',
[request.form['choicetext'], 4])
g.db.commit()
return redirect(url_for('show_polls'))
しかし、これはうまくいきません。ビューが間違っているのか、HTML レイアウト部分が間違っているのかわかりません。誰でもこれで私を助けてくれますか?
投票を追加する HTML 部分は次のとおりです。
{% for i in range(4) %}
<dt>Choices:
<dd><input type=text name=choicetext>
{% endfor %}