在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'
我想知道实现这个的正确方法是什么。我看到它是一个函数,所以我认为它需要在一个字段上调用,但我不确定我做错了什么。
答案 0 :(得分:1)
所以我想出来了。我想这是在文档中,但我有一段时间不清楚。这是我为渲染这个领域所做的。我想这应该是显而易见的,但如果有人在这里寻找它,那就是:
tester = SelectMultipleField(choices=my_choices, widget=select_multi_checkbox)
只需将其称为小部件即可。很简单。我希望我早点把它们放在一起。