我正在創建一個用于安排卡車預約的 CRUD 燒瓶網路應用程式。我知道如何創建、更新和洗掉約會。我無法弄清楚如何從資料庫中檢索特定資料。
我想要 3 個復選框(一個用于可以運送的每種材料型別),可用于過濾表資料,并使用提交按鈕來啟動查詢。
下面的代碼運行,但我希望能夠選擇多種材料并將其顯示在表格中。我嘗試過使用 filter_by(or_)、jquery 和陣列,但沒有任何運氣。
應用程式.py:
app = Flask (__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
class appts_db(db.Model):
id = db.Column(db.Integer, primary_key=True)
carrier = db.Column(db.String(100))
material = db.Column(db.String(10))
pickup_date = db.Column(db.String(10))
def __repr__(self):
return '<Appt %r>' % self.id
@app.route('/', methods=['GET', 'POST'])
def index():
search_material = request.args.get('material_filter')
appts = appts_db.query.filter_by(material = search_material) \
.order_by(appts_db.pickup_date).all()
return render_template('index.html', appts=appts)
和 index.html:
<h3>Appointment List:</h3>
<table>
<tr>
<th>Carrier</th>
<th>Material</th>
<th>Pickup Date [YYYY-MM-DD]</th>
</tr>
{% for appt in appts %}
<tr>
<td>{{ appt.carrier }}</td>
<td>{{ appt.material }}</td>
<td>{{ appt.pickup_date }}</td>
</tr>
{% endfor %}
</table>
<form action="/" method="GET">
<label>Select a material:</label><br>
<input type="checkbox" name="material_filter" id="HCl_filter" value="HCl">
<label for="HCl">HCl</label><br>
<input type="checkbox" name="material_filter" id="Caustic_filter" value="Caustic">
<label for="Caustic">Caustic</label><br>
<input type="checkbox" name="material_filter" id="Bleach_filter" value="Bleach">
<label for="Bleach">Bleach</label><br>
<input type="submit" value="Filter Appointments">
</form>
uj5u.com熱心網友回復:
完成這項作業需要進行兩項更改。
首先,request.args.get只會從表單資料中檢索單個值。這通常是可以的,但如果表單有多個具有相同name屬性的輸入則不行。在這種情況下,我們必須使用request.args.getlist來獲取所有值作為list.
其次,該filter_by方法不能表示從相同屬性的值串列中進行選擇。在這種情況下,我們希望.filter與屬性的.in_方法結合使用。
所以路線應該是這樣的:
@app.route('/', methods=['GET', 'POST'])
def index():
# Get values for all of the material_filter inputs.
search_materials = request.args.getlist('material_filter')
# Select all rows that match the inputs.
appts = appts_db.query.filter(appts_db.material.in_(search_materials)) \
.order_by(appts_db.pickup_date).all()
return render_template('index.html', appts=appts)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/510190.html
上一篇:如何查看臨時表?
