作者:干杯平凡小点_113 | 来源:互联网 | 2023-02-10 09:58
我是编程和Flask的新手,但我一直陷在这个问题上。
我正在尝试在Web应用程序中实现搜索功能,该功能将从表单中获取数据并将其与数据库中的值进行比较并列出结果。
这是我到目前为止的内容:
views.py
@app.route('/search', methods=['GET', 'POST'])
def search():
searchForm = searchForm()
courses = models.Course.query.order_by(models.Course.name).all()
if searchForm.validate_on_submit():
for i in courses:
if searchForm.courseName.data == i.name:
searchResult = models.Course.filter(Course.name.like('%searchForm.courseName.data%'))
return render_template('courselist.html', courses = courses, searchResult = searchResult)
表格
class searchForm(Form):
courseName = StringField('Search course', validators=[DataRequired(), Length(max=60)])
数据库模型
class Course(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(40), unique=True)
courseCode = db.Column(db.String(10), unique=True)
duration = db.Column(db.Integer)
maxStudents = db.Column(db.Integer)
startDate = db.Column(db.DateTime)
prerequisites = db.Column(db.String(500))
trainerID = db.Column(db.Integer, db.ForeignKey('trainer.id'))
venueID = db.Column(db.Integer, db.ForeignKey('venue.id'))
sessiOns= db.relationship('Session', backref='course', lazy='dynamic')
bookings = db.relationship('Booking', backref='course', lazy='dynamic')
html文件
{% extends "index.html" %}
{% block content %}
Courses:
{% for course in courses %}
-
{% endfor %}
{% endblock %}
我认为一般逻辑是正确的,但是我需要一些帮助来调整它。
1> Matt Healy..:
您的逻辑views.py
似乎有点偏离。您正在从数据库中检索所有Course对象,并在它们之间循环。然后,您检查课程名称是否与搜索输入完全匹配-如果匹配,请尝试查找匹配的课程。我认为最好这样构造:
@app.route('/search', methods=['GET', 'POST'])
def search():
searchForm = searchForm()
courses = models.Course.query
if searchForm.validate_on_submit():
courses = courses.filter(models.Course.name.like('%' + searchForm.courseName.data + '%'))
courses = courses.order_by(models.Course.name).all()
return render_template('courselist.html', courses = courses)