flask - WTForms booleanfield 总是返回 True
问题描述
我写了自定义FieldList
:
class EventForm(Form):
enabled = BooleanField()
user_role = IntegerField()
class EventsForm(Form):
user_roles = FieldList(FormField(EventForm))
section_name = StringField()
class CompanyForm(BaseForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._populate_event_permissions()
def _populate_event_permissions(self):
permissions = get_all_event_permissions()
for event, value in permissions.items():
form_field = self.event.append_entry(
data={'section_name': event})
field_1 = form_field.user_roles.append_entry(
data={'enabled': True, 'user_role': 8})
field_1.enabled.label.text = 'Participant'
field_1.enabled.name = value
field_2 = form_field.user_roles.append_entry(
data={'user_role': 9})
field_2.enabled.label.text = 'Organizer'
field_2.enabled.name = value
field_3 = form_field.user_roles.append_entry(
data={'user_role': 10})
field_3.enabled.label.text = 'Admin'
field_3.enabled.name = value
在模板中很好地渲染了它,但是每次我尝试发送它并且复选框False
总是True
按原样发送时append_entry
。这是我检查输入数据的方法。
class MyView(BaseModelView):
def on_model_change(self, form, model, is_created):
for section in form.event.entries:
for entry in section.user_roles.entries:
print(entry.enabled.data)
看起来default value
无论复选框是真还是假,表单总是发送我还定义了表单预填充,如果我手动将数据库中的值设置为 False 它会将输入正确呈现为 False 但是当我再次发送表单时(无论是什么复选框状态是)它将数据库覆盖为True。表单看不到编辑值肯定存在问题。我该如何解决?
解决方案
您正在表单本身的 init 方法中设置表单字段的值。这可能会覆盖request.form
作为加载相关视图的一部分在表单上设置的值。
您应该根据需要填充scaffold_form()
或create_form()
/中的字段edit_form()
。
class MyView(BaseModelView):
def scaffold_form(self):
form = super(MyView, self).scaffold_form()
permissions = get_all_event_permissions()
for event, value in permissions.items():
form_field = self.event.append_entry(data={'section_name': event})
# etc.
return form
推荐阅读
- node.js - npm install bootstrap@4.0.0 命令给出 ENETUNREACH 错误
- python - 如何编码分类预测值?
- java - 根据字符串的不同模式拆分字符串
- json - 我有嵌套的列表对象,称为 JSON 中的剧集,那么如何根据 id 父对象而不是位置对象获取剧集列表?
- python - 数据框中的字符串编辑不使用 .replace 代码生效
- django - 如何使用 django.utils.timezone 库将日期时间从特定时区转换为其 UTC 版本?
- python - 将一个大的 numpy 数组转换为字符串
- mysql - Mysql更新多行
- angular - Angular 8 - 没有访问控制允许请求的资源上存在 Origin 标头?
- django - 删除按钮表单标签导致换行