在python中将整数从视图传递到窗体
我有一个带有queryselectfield的wtform,该字段当前填充了所有团队数据库中的数据:在python中将整数从视图传递到窗体,python,flask,wtforms,Python,Flask,Wtforms,我有一个带有queryselectfield的wtform,该字段当前填充了所有团队数据库中的数据: class PitScoutingForm(FlaskForm): team = QuerySelectField( query_factory=lambda: Teams.query.all(), get_label='number') 以及以下观点: @app.route('/competitions/pit-scouting', methods=['GET', '
class PitScoutingForm(FlaskForm):
team = QuerySelectField(
query_factory=lambda: Teams.query.all(), get_label='number')
以及以下观点:
@app.route('/competitions/pit-scouting', methods=['GET', 'POST'])
@login_required
def pit_scouting():
form = PitScoutingForm(request.values)
form.team.choices = [(a.id, a.number) for a in
Teams.query.order_by('number')]
这一切都很好。但是球队名单越来越大了,我想把在这个领域展示的球队限制在当前选定的比赛中,所以我把视角改为
@app.route('competitions/<int: comp_id>/pit-scouting', methods=['GET', 'POST'])
@app.route('competitions//pit scouting',methods=['GET','POST'])
但我不确定如何将comp_id从视图传递到表单,以便我可以过滤比赛id,从而只获得参加比赛的球队。我看到了,但我不太明白解决办法。感谢您的指点。您在视图中使用comp\u id仅从该比赛中选择球队。更改comp_id,无论它在您的团队课程中被称为什么
@app.route('competitions/<int: comp_id>/pit-scouting', methods=['GET', 'POST'])
@login_required
def pit_scouting(comp_id):
form = PitScoutingForm(request.values)
form.team.choices = [(a.id, a.number) for a in Teams.query.filter_by(comp_id=comp_id).order_by('number')]
@app.route('competitions//pit scouting',methods=['GET','POST'])
@需要登录
def pit_侦察(公司id):
表单=PitScoutingForm(request.values)
form.team.choices=[(a.id,a.number)用于Teams.query.filter_by(comp_id=comp_id)。order_by('number')]
来自:
变量部分作为关键字参数传递给视图函数
这意味着您只需更新视图函数,将comp_id
作为参数,如下所示:
@app.route('competitions/<int: comp_id>/pit-scouting', methods=['GET', 'POST'])
@login_required
def pit_scouting(comp_id):
form = PitScoutingForm(request.values)
form.team.choices = [(a.id, a.number) for a in
Teams.query.order_by('number')]
@app.route('competitions//pit scouting',methods=['GET','POST'])
@需要登录
def pit_侦察(公司id):
表单=PitScoutingForm(request.values)
form.team.choices=[(a.id,a.number)用于输入
Teams.query.order_by('number')]
谢谢大家的指点,你们引导我朝着一个有帮助的方向前进。我找到了另一个解决方案,建议使用一个普通的select字段,然后在init中加载选项,如下所示:
class PitScoutingForm(FlaskForm):
team = SelectField('Team', coerce=int)
...
def __init__(self, *args, **kwargs):
super(PitScoutingForm, self).__init__(*args, **kwargs)
self.team.choices = [(a.id, a.number) for a in Teams.query.order_by('number')]
然后,我的视图(忽略sql…有时它比sqlalchemy语法更简单)保持wrt设置选项的原样,除了使用传递给视图的竞争数据
@app.route('/pit-scouting/', defaults={'comp': 2}, methods=['GET', 'POST'])
@app.route('/pit-scouting/competitions/<int:comp>', methods=['GET', 'POST'])
@login_required
def pit_scouting(comp):
sql_text = '''query here'''.format(comp)
result = db.engine.execute(sql_text)
form = PitScoutingForm(request.values)
form.team.choices = [(a.id, a.number) for a in result]
@app.route('/pit scouting/',默认值={'comp':2},方法=['GET','POST'])
@app.route('/pit-scouting/competitions/',methods=['GET','POST'])
@需要登录
def pit_侦察(公司):
sql_text=''query here''。格式(comp)
结果=db.engine.execute(sql\u文本)
表单=PitScoutingForm(request.values)
form.team.choices=[(a.id,a.number)表示输入结果]
是的,我的其他视图都是这样设置的。这似乎没有什么帮助。默认表单(Teams.query.all())中设置的列表似乎没有被我在视图中所做的任何操作所覆盖。这可能是因为您在Pitscouting表单中加载了所有这些团队。