首页 > 解决方案 > 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>

标签: pythonflasksqlalchemyflask-sqlalchemy

解决方案


知道了。我更新了查询如下:

def industry_query():
    return Chart.query.order_by('industry asc').distinct('industry').all()

推荐阅读