changes
This commit is contained in:
38
plugins/search/routes.py
Normal file
38
plugins/search/routes.py
Normal file
@ -0,0 +1,38 @@
|
||||
from flask import Blueprint, render_template, request, jsonify
|
||||
from flask_login import login_required, current_user
|
||||
from app import db
|
||||
from .models import Tag
|
||||
from .forms import SearchForm
|
||||
from plugins.plant.models import Plant
|
||||
|
||||
bp = Blueprint('search', __name__, template_folder='templates')
|
||||
|
||||
@bp.route('/search', methods=['GET', 'POST'])
|
||||
@login_required
|
||||
def search():
|
||||
form = SearchForm()
|
||||
form.tags.choices = [(tag.id, tag.name) for tag in Tag.query.order_by(Tag.name).all()]
|
||||
results = []
|
||||
if form.validate_on_submit():
|
||||
query = db.session.query(Plant).join(PlantScientific).join(PlantCommon)
|
||||
if form.query.data:
|
||||
q = f"%{form.query.data}%"
|
||||
query = query.filter(
|
||||
db.or_(
|
||||
PlantScientific.name.ilike(q),
|
||||
PlantCommon.name.ilike(q),
|
||||
Plant.current_status.ilike(q)
|
||||
)
|
||||
)
|
||||
if form.tags.data:
|
||||
query = query.filter(Plant.tags.any(Tag.id.in_(form.tags.data)))
|
||||
query = query.filter(Plant.owner_id == current_user.id)
|
||||
results = query.all()
|
||||
return render_template('search/search.html', form=form, results=results)
|
||||
|
||||
@bp.route('/search/tags')
|
||||
@login_required
|
||||
def search_tags():
|
||||
term = request.args.get('term', '')
|
||||
tags = Tag.query.filter(Tag.name.ilike(f"%{term}%")).limit(10).all()
|
||||
return jsonify([tag.name for tag in tags])
|
Reference in New Issue
Block a user