在wtforms中如何使用真实形式的文档中的示例?

时间:2016-11-09 02:59:32

标签: python wtforms flask-wtforms

wtform docuentation中,以下函数被描述为可以将SelectMultipleField呈现为复选框集合的窗口小部件:

def select_multi_checkbox(field, ul_class='', **kwargs):
    kwargs.setdefault('type', 'checkbox')
    field_id = kwargs.pop('id', field.id)
    html = [u'<ul %s>' % html_params(id=field_id, class_=ul_class)]
    for value, label, checked in field.iter_choices():
        choice_id = u'%s-%s' % (field_id, value)
        options = dict(kwargs, name=field.name, value=value, id=choice_id)
        if checked:
            options['checked'] = 'checked'
        html.append(u'<li><input %s /> ' % html_params(**options))
        html.append(u'<label for="%s">%s</label></li>' % (field_id, label))
    html.append(u'</ul>')
    return u''.join(html)

我试图以此为例来查看我的一个表单中的内容。但是我遇到了一些麻烦,我不知道如何调用它,因为我只习惯使用默认字段。这就是我的尝试:

class myForm(FlaskForm):
    my_choices = [('1', 'Choice1'), ('2', 'Choice2'), ('3', 'Choice3')]
    my_multi_select = SelectMultipleField(choices = my_choices,id='Test')
    my_checkbox_multi_select = select_multi_checkbox(my_multi_select)

这给了我以下错误:

line 52, in select_multi_checkbox
field_id = kwargs.pop('id', field.id)
AttributeError: 'UnboundField' object has no attribute 'id'

我的下一次迭代是:

my_checkbox_multi_select = select_multi_checkbox(SelectMultipleField,ul_class='',choices=my_choices,id='test')

这也给了我一个id属性错误,但字段不再是Unbounded。

line 52, in select_multi_checkbox
field_id = kwargs.pop('id', field.id)
AttributeError: type object 'SelectMultipleField' has no attribute 'id'

我想知道实现这个的正确方法是什么。我看到它是一个函数,所以我认为它需要在一个字段上调用,但我不确定我做错了什么。

1 个答案:

答案 0 :(得分:1)

所以我想出来了。我想这是在文档中,但我有一段时间不清楚。这是我为渲染这个领域所做的。我想这应该是显而易见的,但如果有人在这里寻找它,那就是:

tester = SelectMultipleField(choices=my_choices, widget=select_multi_checkbox)

只需将其称为小部件即可。很简单。我希望我早点把它们放在一起。