python - Flask,SQLAlchemy:如何使用 wtforms.ext.sqlalchemy.fields.QuerySelectField 进行下拉
问题描述
我是 Flask/SQLAlchemy 的新手。我有一个包含两个表的数据库:Family 和 Chart。Family 表有两列:id 和 familyname。图表表有几个列,包括行业。我能够显示家庭/家庭字段的下拉列表,但不能显示图表/行业字段的下拉列表。这是我的代码,不胜感激。
表格.py
from flask import request
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField, TextAreaField
from wtforms.ext.sqlalchemy.fields import QuerySelectField
from wtforms.validators import ValidationError, DataRequired, Length
from app.models import Family, Chart
def family_query():
return Family.query.order_by('familyname asc').all()
def industry_query():
return Chart.query(Chart.industry.distinct()).all()
class FamilyForm(FlaskForm):
optsFamily = QuerySelectField(query_factory=family_query,allow_blank=True, get_label='familyname', blank_text="Click to select")
optsIndustry = QuerySelectField(query_factory=industry_query,allow_blank=True, get_label='industry', blank_text="Click to select")
路线.py
from flask import render_template, flash, redirect, url_for, request, g,current_app
from app import db
from app.main.forms import FamilyForm
from app.models import Family, Chart
from app.main import bp
@bp.route('/', methods=['GET', 'POST'])
def index():
form = FamilyForm()
return render_template('index.html', form = form )
HTML
{{ form.csrf_token }}
{{ form.optsFamily }}
<ul>
{% for error in form.optsFamily.errors %}
<li style="color:red;">{{ error }}</li>
{% endfor %}
</ul>
{{ form.optsIndustry }}
<ul>
{% for error in form.optsIndustry.errors %}
<li style="color:red;">{{ error }}</li>
{% endfor %}
</ul>
解决方案
知道了。我更新了查询如下:
def industry_query():
return Chart.query.order_by('industry asc').distinct('industry').all()
推荐阅读
- angular - Angular 8无法匹配延迟加载模块的辅助(命名)出口上的任何路由
- openvpn - OpenVPN 用户证书
- c++ - 使用 h264 流创建 mkv 容器时数据无效,因为 extradata 为空
- corda - Corda 性能滞后于大容量交易
- express - App Engine Google Cloud 中的部署失败
- python - UnboundLocalError:分配前引用的局部变量“csv_file”
- react-router - React-router-dom:非常简单的嵌套路由不起作用
- azure - 使用托管标识从 JAVA Azure 应用服务访问 Azure Key Vault
- java - 无法连接到 websocket 服务器(弹簧)
- javascript - 如何在javascript中一次获取一个h3的文本内容?