python - 用数据库数据填充 flask_wtf 表单 - 数据库创建中断
问题描述
我正在尝试研究如何使用 flask_wtf 让动态驱动的表单在 Flask 中工作。我想从 flask_sqlalchemy 数据库中获取值来填充选择。如果数据库已经创建,我有这个工作。如果我想填充一个新的数据库,它会以一种奇怪的方式中断,并且似乎卡在了db.create_all()
步骤上。如果我向服务器发送请求,我会收到 SQL 错误,因为架构尚不存在。当我注释掉 forms.py 中的违规行时,数据库创建得很好。然后我可以取消注释该行并且我的数据库驱动选项完美运行!
我猜这些表单是在数据库初始化之前呈现的 - 如果有人对我应该如何设置它有任何指导,将不胜感激。
我还尝试了 wtforms.ext.sqlalchemy有点工作但坚持__repr__
以表格输出。在任何情况下 wtforms.ext.sqlalchemy 都被贬低并移出到似乎已经死亡的wtforms/wtforms-sqlalchemy 。
塔,
安德鲁
我的路线.py
"""Logged-in page routes."""
from flask import Blueprint, redirect, render_template, url_for
from flask_login import current_user, login_required, logout_user
from .forms import DashboardForm
# Blueprint Configuration
main_bp = Blueprint(
'main_bp', __name__,
template_folder='templates',
static_folder='static'
)
@main_bp.route('/', methods=['GET'])
@login_required
def dashboard():
"""Logged-in User Dashboard."""
form = DashboardForm()
return render_template(
'dashboard.jinja2',
title='Flask-Login Tutorial.',
template='dashboard-template',
current_user=current_user,
body="You are now logged in!",
form=form
)
我的表格.py
"""Sign-up & log-in forms."""
from flask_wtf import FlaskForm
from wtforms import SelectField, PasswordField, StringField, SubmitField
from wtforms.validators import DataRequired
from .models import db, User
def user_choices():
output_list = []
result = db.session.query(User).all()
for row in result:
output_list.append((row.id, row.name))
return output_list
class DashboardForm(FlaskForm):
"""Test to populate from from db data"""
# name = StringField('Users', validators=[DataRequired(), ])
name = SelectField('boat_type', choices=user_choices(), validators=[DataRequired(), ])
submit = SubmitField('Submit')
我的 __ 初始化 __.py
"""Initialize app."""
from flask import Flask
from flask_login import LoginManager
from flask_sqlalchemy import SQLAlchemy
# from ddtrace import patch_all
# patch_all()
db = SQLAlchemy()
login_manager = LoginManager()
def create_app():
"""Construct the core app object."""
app = Flask(__name__, instance_relative_config=False)
app.config.from_object('config.Config')
# Initialize Plugins
db.init_app(app)
login_manager.init_app(app)
with app.app_context():
from . import routes
from . import auth
from .assets import compile_static_assets
# Register Blueprints
app.register_blueprint(routes.main_bp)
app.register_blueprint(auth.auth_bp)
# Create Database Models
db.create_all()
# Compile static assets
if app.config['FLASK_ENV'] == 'development':
compile_static_assets(app)
return app
解决方案
推荐阅读
- objective-c - 在 Objective-C 代码中使用 Swift 的缺点?
- javascript - @Html.Partial 之后的 Ko 绑定不起作用
- python - Selenium:检查元素是否存在于循环中,如果为真,则单击,如果不存在则继续
- asp.net-identity - 使用带有 aspnet.identity 的简单注入器
- jdbc - 如何使用 Grafana 监控 JDBC 调用和统计信息
- openssl - 如何创建自己的扩展验证证书以显示绿条?
- matlab - 在matlab中创建间隔[a,b]的线性对数对数线性分区,但匹配步骤
- node.js - req.flash() 需要会话但会话存在
- node.js - 如果 JS stacktrace 中的行号超出文件末尾是什么意思?
- javascript - 在“npm”注册表中找不到“babel-code-frame@^6.26.0”所需的包“chalk@^1.1.3”(纱线添加)