在我的 flask 项目中,我有 views.py、models.py(SQLAlchemy 到 postgres)和 forms.py 文件。我一直在 form.py 中定义表单并从 views.py 实例化它们。
我能够为 SelectField 创建动态内容,但很难为 BooleanField 创建此内容。这是我想要做的:
创建一个从团队中检索球员的表单(在 db 中)。为每个玩家创建一个 BooleanField。如果 db 中的“事件”字段为 1,则该值被选中(真),否则它是未选中(假)。系统用户可以选中/取消选中任何框,然后提交表单。
我对玩家进行迭代没有问题,但我似乎无法弄清楚如何为每个 BooleanField 生成唯一的名称(如果它们具有相同的名称,我只会得到一个值)。我还需要根据用户的事件状态动态传递默认值。
我做了一些研究,看到了一些关于匹配我的 ORM 模型的想法 - 但我并不是真的想创建一个字段条目来匹配我的玩家的 ORM 模型中的每一列 - 只是试图提取一些数据并创建一个动态的表格。
可能能够在 jinja2 模板中完成这一切,但这似乎不是最好的方法......
好的 - 现在尝试变得更基本,仍然有问题 - BooleanField 总是返回 False:
表格.py:
class myform(Form):
available = BooleanField('available')
submit = SubmitField('Save')
View .py:
form = myform(available=True)
网页.html
Available: {{ form.available }}
当网页呈现复选框时(由于可用=真),我正在传递它,但是当我提交时,值返回为假)。
我确实注意到很奇怪的是,即使选中了该框,也会呈现呈现的 HTML -
<input id="available" type="checkbox" value="y" name="available" checked="">
Checked=""对我来说没有意义。我注意到当我删除 'available=True' 时,没有选中 =“”。我认为应该检查正确的 HTML=检查..
最佳答案
如果要根据表的特定列的值动态设置 checked
的 BooleanField
属性,可以通过以下方式进行:forms.py
:
# Create the boolean field in the form
is_active = BooleanField('Is Active')
views.py
:# Select the players from the database and for each of them set the boolean field state
# Here we are selecting all players and iterating through them
# session.query() is specific to SQLAlchemy which is primarily used with flask as an ORM
players = session.query(Player).all()
for player in players:
# Set other form fields like a dynamically populated SelectField etc.
# Set the boolean field for each player here
form.is_active.default = "checked" if player.active == 1 else ""
关于python - Flask WTForms - 来自数据库的动态 BooleanField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33622826/