【发布时间】:2018-07-29 03:22:23
【问题描述】:
如果我在字段构建过程中设置默认值,一切都会按预期工作:
my_field = StringField("My Field: ", default="default value", validators=[Optional(), Length(0, 255)])
但是,如果我尝试以编程方式设置它,它就没有效果。我尝试修改__init__ 方法,如下所示:
class MyForm(FlaskForm):
my_field = StringField("My Field: ", validators=[Optional(), Length(0, 255)])
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
self.my_field.default = "set default from init" # doesn't work
这不会设置默认值。如何以编程方式执行此操作(因为该值是基于数据库查询的动态值,如果我在 __init__ 之外执行此操作,则它不会获得最新值)?
来自我requirements.txt的相关版本:
Flask==0.12
Flask-WTF==0.14.2
WTForms==2.1
另外,如果这很重要,我正在运行 Python 3.6。
或者,我可以使用一种解决方案,该解决方案使我能够在添加新记录时在初始表单加载时设置此字段的值数据(与构造函数中指定的默认值相同的行为),但也使用相同的表单用于编辑,因此我不希望它更改已在编辑时保存/存储的对象数据。
【问题讨论】:
-
你想做这样的事情吗? stackoverflow.com/a/51579212/5320906
-
@snakecharmerb 我想是这样,但这似乎有点不同,因为它似乎有两种不同的形式(NewForm 和 Foo),而我只有一种形式,但只想动态设置默认值对于一个领域。看看我能不能让它工作并告诉你。
-
@snakecharmerb 原来这正是我所需要的!易于实施/应用。我只是赞成它,但如果在此处发布/上下文化,我也会赞成并接受作为答案。谢谢!
-
@snakecharmerb 出于好奇,它是否也可以用于设置选择字段默认值,在表单的 init 方法中动态填充选项?
-
已发布答案。我快速查看了在选择字段中设置选项,如果我在创建表单后设置
form.field.choices似乎可以工作,但如果我在表单的__init__方法中进行设置则不行。也许您可以为此提出一个单独的问题,显示您如何填充选择?感谢您在另一个答案中发现 Foo 错字。
标签: python flask python-3.6 flask-wtforms wtforms