WTForms表单的新实例会复制现有表单吗?

问题描述

我有一个带有FieldList的表单。我需要操纵该字段列表,并已阅读该说明,您需要创建一个新的FieldList并将记录从旧记录复制到其中。但是,当我创建FieldList的新实例时,它以旧FieldList中值的副本开始。我希望它以空列表开头。为什么要从其他实例复制值?这是我表格的缩写:

class MatchRuleForm(FlaskForm):
    and_or_selector = SelectField(label="AND/OR",choices=[('AND','AND'),('OR','OR')],default='AND')
    table = SelectField(label='Table Column')
    comparator = StringField(label='Equals',default='=',render_kw={"disabled": True})

class MatchRulesAllForm(FlaskForm):
    tbl_name = HiddenField(label='Table Name')
    rules = FieldList(unbound_field=FormField(form_class=MatchRuleForm),min_entries=0)

这是我的代码,在该代码中实例化FieldList的新版本...

new_list = forms.MatchRulesAllForm().rules

但是,当我这样做时,new_list以MatchRulesAllForm现有实例中已经存在的规则的副本开始。这似乎是实际副本,而不是对现有实例的引用,因为我可以消除new_list中的记录,并且它不会影响原始实例。实际上,我已经用下面的代码临时解决了这个问题,该代码清空了新列表,但不影响原始列表...

for rule in range(0,len(new_list)):
    new_list.pop_entry()  # Can't create with an empty list BUT we need an empty list!

那么,我在这里想念什么?这是预期的行为吗? (顺便说一句,我对OO很陌生,也许有些东西我没有得到?)谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)