2016-01-15 137 views
0

我有一个EmployeeForm带有如下所示包含PhotoForm的字段中的一个:为什么我的WTForm HiddenField没有被设置为默认值?

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,我无法弄清楚为什么。我检查了一些stackoverflow的问题,但他们不完全适合我的问题,因为我一起使用Flask-AdminWTForm在我看来使它更复杂一些。

而且,我admin.py文件的形式呈现如下:

class EmployeeView(ModelView): 
    form = EmployeeForm 

我不知道这是否是对WTForm的侧面或瓶,联系身边的一个问题,但我一直在努力了很长时间才能完成这项工作。有没有人有任何想法?帮助将不胜感激。

回答

2

字段的第一个参数是它的标签。在你的代码中,你没有将数据传递到现场,你正在设置它的标签。使用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">' 
+1

Thanks @ jumbopap。我正要把我的头发拉出来。 –

相关问题