flask+SQLAlchemyで簡単なテーブルを作成します。但し、各行のidは登録される生徒の出席番号を登録します。登録時には必ずしも出席番号順に登録するとは限らない為、一旦登録した登録情報をidの番号順に並べ替えるにはどうすれば良いでしょうか。order_byを試してみましたが、出力はid順ではなく、登録された順になってしまいます。メインプログラムと対応するhtmlのソースは以下の通りです。
from flask import Flask, request, render_template from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://localhost/testdb' db = SQLAlchemy(app) class Meibo(db.Model): __tablename__ = 'seitomeibo' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.Text()) @app.route('/list', methods=['GET']) def input_list(): return render_template('registername.html') @app.route('/list', methods=['POST']) def register_list(): seito = Meibo() seito.id = request.form["id"] seito.name = request.form["name"] db.session.add(seito) db.session.commit() db.session.query(Meibo).order_by(Meibo.id) db.session.commit() meibo = Meibo.query.all() return render_template('namelist.html', meibo = meibo) if __name__ == '__main__': db.create_all() app.run(debug = True)
html
1<!-- namelist.html ---> 2{% extends 'layout.html' %} 3{% block content %} 4 5 <table> 6 {% for seito in meibo %} 7 <tr> 8 <td>{{ seito.id }}</td> 9 <td>{{ seito.name }}</td> 10 </tr> 11 {% endfor %} 12 </table> 13 14{% endblock %} 15
html
1<!--- registername.html ---> 2{% extends 'layout.html' %} 3{% block content %} 4 5 6<form action="/list" method="post"> 7 <input type="number" name="id"> 8 <input type="text" name="name"> 9 10 11<button type="submit">名簿に登録</button> 12 13{% endblock %}
出力結果例(入力した順に出力されている)
1 中村太郎
3 小林次郎
2 山田花子
希望する出力結果(idの順にしたい)
1 中村太郎
2 山田花子
3 小林次郎
何が「上手く動作しません」なのかがわかりません。
何を作って、何を実行したら、どのような現象が発生して問題があるのかを提示ください。
回答1件
あなたの回答
tips
プレビュー