私は一連のフィルタとhtmlの選択ドロップダウンを使用して高度な検索を試みます。私は、ユーザーが検索したいさまざまなフィールドを選択して結果を得ることができるようにしたいと思います。下のviews.pyの 'query'に4つのフィールドのみが有効な場合、「検索」(つまり複雑なフィルタ)が動作するようになりますが、4つ以上のフィールドはすべてのフィルタフィールド値を満たすレコードがないため結果を返しません。私が知っていたことは起こるだろう。Flask-SQLAlchemy-詳細フィルタを使用して検索
私は " - すべての - "オプションを作成する方法を理解しようとしています。そのため、ユーザーは最も関心のある属性と無視するクエリを選択できます。 SQLAlchemyのを使用して
views.py(切り捨てバージョン-持たを検索するために、いくつかのより多くのフィールドを)
from flask import render_template, redirect, session, url_for, request, send_from_directory
from sqlalchemy import or_, and_, select
from flask.ext.security import login_required
from datetime import datetime
from RestorationPlantDB import app, db
from RestorationPlantDB import SPECIES, SPInfo, SPRef, Role, User
@app.route('/search_advanced', methods = ['GET', 'POST'])
def search_advanced():
if request.method == 'POST':
stratum = request.form.get('stratum')
origin = request.form.get('origin')
query = SPInfo.query.filter(and_(SPInfo.Stratum == stratum,
SPInfo.Origin == origin))
return render_template('result_advancedsearch.html', year=datetime.now().year, query=query)
return render_template('search_advanced.html', year=datetime.now().year)
@app.route('/result_advancedsearch', methods = ['GET', 'POST'])
def result_advancedsearch():
return render_template('result_advancedsearch.html', year=datetime.now().year)
search_advanced.html
{% extends "layout.html" %}
{% block content %}
<div class="container">
<h1>Advanced Search</h1>
<form method="POST" action="search_advanced">
<div class="advanced">
<!--Select species stratum-->
<label for="stratum"><p class="advanced">Lifeform</p></label>
<select name="stratum" id="stratum">
<option value= ""> -- All -- </option> <!-- Need to figure out how to pass an all option-->
<option value="Graminoid">Graminoid</option>
<option value="Forb">Forb</option>
<option value="Subshrub">Sub-Shrub</option>
<option value="Shrub">Shrub</option>
<option value="Tree">Tree</option>
<option value="Vine">Vine</option>
</select>
</div>
<div class="advanced">
<!--Select species origin-->
<label for="origin"><p class="advanced">Origin</p></label>
<select name="origin" id="origin">
<option value=""> -- All -- </option> <!-- Need to figure out how to pass an all option-->
<option value="Native">Native</option>
<option value="Exotic">Exotic</option>
</select>
</div>
</form>
</div>
{% endblock %}
@ PJ Santoroありがとう!私はちょっと試してみる必要がありますが、私はちょうど簡単なテストをして、それが動作しているように見えます! – DazedAndConfusedNewby
すばらしく、私は助けることができてうれしい! – abigperson