为什么我的 WTForm HiddenField 没有设置为默认值?

Why is my WTForm HiddenField not being set to a default value?

我有一个 EmployeeForm,其中一个字段由 PhotoForm 组成,如下所示:

class EmployeeForm(Form):
    name = StringField('Full Name', validators=[DataRequired()])
    title = StringField('Job Title', validators=[DataRequired()])
    email = StringField('Company Email', validators=[DataRequired()])
    department = StringField('Department', validators=[DataRequired()])
    photo = FormField(PhotoForm)

取决于 USE_S3 配置变量是否设置为 TrueFalse 我希望我的照片对象上的两个字段自动设置为默认值,如下所示:

class PhotoForm(Form):
    image = S3ImageUploadField(base_path=app.config['UPLOAD_FOLDER'],namegen=photo_name_generator)

    if app.config['USE_S3']:
        image_storage_type = HiddenField('s3')
        image_storage_bucket_name = HiddenField(app.config['S3_BUCKET_NAME'])
    else:
        image_storage_type = HiddenField('empty string')
        image_storage_bucket_name = HiddenField('empty string')

但是,当我检查表单的 html 时没有隐藏字段,当我在提交时检查数据库时 image_storage_typeimage_bucket_name 上是否有任何设置值,我无法弄清楚为什么会这样。我检查了一些 Whosebug 问题,但它们并不完全符合我的问题,因为我同时使用了 Flask-AdminWTForm,在我看来这使它变得更加棘手。

此外,我的 admin.py 表单呈现文件如下所示:

class EmployeeView(ModelView):
     form = EmployeeForm

我不确定这是 WTForm 方面的问题还是 Flask-Admin 方面的问题,但我已经尝试了很长时间才能完成这项工作。有人有什么想法吗?将不胜感激。

字段的第一个参数是它的标签。在您的代码中,您没有将数据传递到字段中,而是设置了它的标签。使用 default kwarg.

设置默认数据
from wtforms import Form, HiddenField

class PhotoForm(Form):
    default_image_data = "foo" if True else "bar"

    image_storage_type = HiddenField('image storage', default=default_image_data)

>>> form = PhotoForm()
>>> form.image_storage_type.data
'foo'
>>> form.image_storage_type()
u'<input id="image_storage_type" name="image_storage_type" type="hidden" value="foo">'