在Flask中,可以使用QuerySelectField来创建一个下拉列表,根据其他QuerySelectField的选定值来填充另一个QuerySelectField。下面是实现这个功能的步骤:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import QuerySelectField, SubmitField
from wtforms.validators import DataRequired
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'your_database_uri'
db = SQLAlchemy(app)
class Category(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), unique=True)
def __repr__(self):
return self.name
class Product(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), unique=True)
category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
category = db.relationship('Category', backref=db.backref('products', lazy='dynamic'))
def __repr__(self):
return self.name
class ProductForm(FlaskForm):
category = QuerySelectField('Category', query_factory=lambda: Category.query.all(), get_label='name', validators=[DataRequired()])
product = QuerySelectField('Product', query_factory=lambda: Product.query.filter_by(category_id=category.data.id).all(), get_label='name', validators=[DataRequired()])
submit = SubmitField('Submit')
@app.route('/', methods=['GET', 'POST'])
def index():
form = ProductForm()
if form.validate_on_submit():
selected_product = form.product.data
# 执行其他操作,如保存到数据库或进行其他处理
return f'Selected Product: {selected_product}'
return render_template('index.html', form=form)
<!DOCTYPE html>
<html>
<head>
<title>Flask QuerySelectField Example</title>
</head>
<body>
<h1>Flask QuerySelectField Example</h1>
<form method="POST" action="/">
{{ form.csrf_token }}
{{ form.category.label }} {{ form.category }}
{{ form.product.label }} {{ form.product }}
{{ form.submit }}
</form>
</body>
</html>
以上代码实现了一个简单的Flask应用,其中包含了两个QuerySelectField,根据第一个QuerySelectField的选定值来动态填充第二个QuerySelectField。通过选择不同的Category,第二个下拉列表中的Product会根据所选Category的category_id进行过滤。
注意:上述代码中的your_secret_key
和your_database_uri
需要根据实际情况进行替换。
推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云数据库(TencentDB)可用于部署和管理Flask应用。您可以访问腾讯云官网了解更多产品信息和文档:腾讯云产品。
领取专属 10元无门槛券
手把手带您无忧上云