- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个脚本,通常从数据库中检索 5 行,我想将其显示为复选框列表。
但它无法正确显示:它显示“UnboundField ”
form.py
class ExampleForm(FlaskForm):
[...query & results...]
for line in results_sql:
list_checkbox[line.label] = BooleanField(line.label)
routes.py
@bp.route('/example')
def example():
form = ExampleForm()
return render_template("index.html", form=form)
index.html
<table class="table table-bordered table-condensed">
{% for checkbox in form.list_checkbox %}
<tr>
<td>{{ checkbox }}</td>
<td>{{ form.list_checkbox[checkbox ] }}</td>
</tr>
{% endfor %}
</table>
结果:
最佳答案
您已将字段放入嵌套字典中。该表单无法绑定(bind)此类字段,因为它无法处理任意容器。
相反,您需要将字段放在 field enclosure 中。我会使用 FormField()
field指向嵌套的 Form
类。您可以通过调用 BaseForm()
constructor 来生成嵌套的 Form
类。 :
What BaseForm provides is a container for a collection of fields, which it will bind at instantiation, and hold in an internal dict. Dict-style access on a BaseForm instance will allow you to access (and modify) the enclosed fields.
然后,当您创建 ExampleForm()
类的实例时,它将绑定(bind) FormField
字段,然后该字段又创建嵌套表单的实例对象,然后绑定(bind)您提供的每个字段 BaseForm()
因为调用 BaseForm(fields)
将创建一个表单实例,因此您需要先将其包装在函数中,然后才能将其用作嵌套表单:
def form_from_fields(fields):
def create_form(prefix='', **kwargs):
form = BaseForm(fields, prefix=prefix, meta=FlaskForm.Meta)
form.process(**kwargs)
return form
return create_form
class ExampleForm(FlaskForm):
# ...
list_checkbox = FormField(
form_from_fields(
[(line.label, BooleanField(line.label)) for line in results_sql]
)
)
BaseForm()
不像 Form
类那样接受任何数据,因此您需要传递 FormField()
的参数返回实例之前,将 create 实例传递给 .process()
方法。
渲染时迭代 list_checkbox
字段时,您可以直接获取字段并从字段对象中获取标签:
<table class="table table-bordered table-condensed">
{% for checkbox in form.list_checkbox %}
<tr>
<td>{{ checkbox.label }}</td>
<td>{{ checkbox }}</td>
</tr>
{% endfor %}
</table>
演示(使用基础 WTForms 库,但 Flask-WTF 流程相同):
>>> from wtforms.form import BaseForm, Form
>>> from wtforms.fields import BooleanField, FormField
>>> fields = ['Calendrier', 'Commentaire', 'Dessin', 'Ex-libris', 'Gravure']
>>> def form_from_fields(fields):
... def create_form(prefix='', **kwargs):
... form = BaseForm(fields, prefix=prefix)
... form.process(**kwargs)
... return form
... return create_form
...
>>> class ExampleForm(Form):
... list_checkbox = FormField(form_from_fields([(field, BooleanField(field)) for field in fields]))
...
>>> form = ExampleForm()
>>> form.list_checkbox
<wtforms.fields.core.FormField object at 0x1232a76d8>
>>> list(form.list_checkbox)
[<wtforms.fields.core.BooleanField object at 0x1232a77f0>, <wtforms.fields.core.BooleanField object at 0x1232a78d0>, <wtforms.fields.core.BooleanField object at 0x1232a7978>, <wtforms.fields.core.BooleanField object at 0x1232a7a20>, <wtforms.fields.core.BooleanField object at 0x1232a7ac8>]
>>> print(*form.list_checkbox, sep='\n')
<input id="list_checkbox-Calendrier" name="list_checkbox-Calendrier" type="checkbox" value="y">
<input id="list_checkbox-Commentaire" name="list_checkbox-Commentaire" type="checkbox" value="y">
<input id="list_checkbox-Dessin" name="list_checkbox-Dessin" type="checkbox" value="y">
<input id="list_checkbox-Ex-libris" name="list_checkbox-Ex-libris" type="checkbox" value="y">
<input id="list_checkbox-Gravure" name="list_checkbox-Gravure" type="checkbox" value="y">
FormField()
字段还确保您可以为表单设置默认值,或者确保您可以在再次发布表单时访问数据集:
>>> form = ExampleForm(list_checkbox={'Calendrier': True})
>>> print(form.list_checkbox['Calendrier'])
<input checked id="list_checkbox-Calendrier" name="list_checkbox-Calendrier" type="checkbox" value="y">
>>> print(form.list_checkbox['Commentaire'])
<input id="list_checkbox-Commentaire" name="list_checkbox-Commentaire" type="checkbox" value="y">
关于python - Flask WTForms BooleanField UnboundField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53340806/
考虑这个简单的 django 模型(由 Postgres 支持): class M(Model): a = BooleanField(default=False) b = Boolea
在我的项目中,用户可以使用任意数量的“联系方式”。例如,一个用户可以只定义移动电话,而另一个用户可以定义移动电话、邮件、Skype 和其他一些。应该可以为每个用户设置一个主要的“联系方式”,所以我创建
Django 1.0.2 中是否有一个小部件可以将 models.BooleanField 呈现为两个单选按钮而不是复选框? 最佳答案 Django 1.2 为模型表单添加了“widgets”Meta
我有这个: force_email = BooleanField('force_email', widget=HiddenInput(), default=False) 我希望在 HTML 模板中将值
我有以下型号: class Profile(models.Model): verified = models.BooleanField(default=False) def prima
我正在使用 Django 1.5.4 这是我面临的问题的一个最小示例。 该模型: #models.py from django.db import models class SampleModel(m
我正在通过构建一个示例应用程序来学习 Django,学生可以在其中选择参与学习部分。参与操作是一个 bool 字段,我希望学生能够选中或取消选中并更新它。默认情况下它是未选中的,我可以选中它并保存表单
我有一个 MySQL 数据库,其中数据是从 Access 数据库迁移的。问题在于 access 将 bool 真值保存为 -1,而 django 将 bool 真值保存为 1(通常发生在 MySQL
我正在使用 Flask-WTForms 创建一个表单。 我正在使用 BooleanField,以便用户可以表明他们同意条款。 我无法在提交时验证 BooleanField 以确保它已被检查。我尝试过使
有没有办法让 Django BooleanField 成为表单中的下拉菜单? 现在它呈现为一个单选按钮。是否可以有一个带有选项的下拉菜单:"is"、“否”? 目前我对该字段的表单定义是: attend
我有以下模型: class Foo(models.Model): pass class Bar(models.Model): foo = models.ForeignKey(Foo)
我的 Django 应用程序有这样一个模块: class myApp(models.Model): is_new = models.BooleanField(default=True)
我正在使用crispy_forms 和FormHelper。我有一个模型字段声明为: active = models.BooleanField(default=True) 在我的 ModelForm
简单情况,模型: class Manufacturer(models.Model): name = models.CharField(max_length=200) slug = mo
我对 Django 相当陌生,我正在使用 Django 1.0。我有这个: 表单.py: class MyForm(forms.Form): extra_cheeze = forms.Bool
简单情况,模型: class Manufacturer(models.Model): name = models.CharField(max_length=200) slug = mo
我找不到一种街头方式来做到这一点。 最佳答案 我找不到一种简单的方法来做到这一点,所以我用 JavaScript 进行了调整来做到这一点。 $(document).ready(function() {
我正在编写一个脚本,通常从数据库中检索 5 行,我想将其显示为复选框列表。 但它无法正确显示:它显示“UnboundField ” form.py class ExampleForm(FlaskFor
我在 postgresql 中尝试 order_by booleanfield 时看到奇怪的输出。 我有一个默认为 false 的 bool 字段我正在使用 order_by(-thebooleanf
在我的 flask 项目中,我有 views.py、models.py(SQLAlchemy 到 postgres)和 forms.py 文件。我一直在 form.py 中定义表单并从 views.p
我是一名优秀的程序员,十分优秀!