flask - 如何将数据传递到烧瓶中的 wtforms QuerySelectField
问题描述
我正在使用 RBAC 开发一个应用程序,并且我正在尝试使用我的 Role 数据库模型中的数据填充 QuerySelectField 但它不起作用,因为我经常遇到这两个错误之一:
sqlalchemy.exc.OperationalError: <unprintable OperationalError object>
或者
TypeError: 'BaseQuery' object is not callable
模型.py
class Role(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement='auto')
name = db.Column(db.String(50), unique=True)
user = db.relationship('User', backref='role', lazy='dynamic')
not_view = db.Column(db.Text, nullable=False)
not_edit = db.Column(db.Text, nullable=False)
not_add = db.Column(db.Text, nullable=False)
not_delete = db.Column(db.Text, nullable=False)
表格.py
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from wtforms.validators import DataRequired, Email, EqualTo, Length
from app.models import Role
from wtforms.ext.sqlalchemy.fields import QuerySelectField
def role_choice():
return Role.query
class AddUserForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)])
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
role_id = QuerySelectField(query_factory=role_choice)
我尝试了几种不同的数据传递方式,但都没有奏效。有人可以帮忙吗?
解决方案
不要费心回答,我已经用动态选择的 SelectField 解决了这个问题。
class UserDetails(Form):
group_id = SelectField(u'Group', coerce=int)
def edit_user(request, id):
user = User.query.get(id)
form = UserDetails(request.POST, obj=user)
form.group_id.choices = [(g.id, g.name) for g in Group.query.order_by('name')]
推荐阅读
- angular - LeafletJS 无效的 GeoJSON 对象
- angular - 立即调用一个 interval() 而不扭曲它的间隔
- linker - 为 Beaglebone 交叉编译 Qt5 时出现链接错误
- ios - 如何模拟返回一个没有显示的ViewController
- java - 我可以用 Java 代码分析 .hprof 文件吗?
- python-3.x - Matplotlib 在没有 rc_context、ax.yaxis 等的情况下操作文本字体属性
- dart - DropdownButton 无法更新它的值(null)
- spring - MockMvc 在响应后不返回创建的资源
- angular - 当 AOT 编译器打开而不是 JIT 时,会自动添加 Flex 布局样式
- sparql - 简单的 SPARQL 查询不给出海龟文件的结果