Autocomplete web2py自动完成小部件不是“;CSS友好型“;?

Autocomplete web2py自动完成小部件不是“;CSS友好型“;?,autocomplete,web2py,Autocomplete,Web2py,在模型中: db.define_table('mytable', Field('auto'), Field('manual') ) db.mytable.auto.widget=SQLFORM.widgets.autocomplete(request,db.mytable.auto) 在控制器中: def index(): form = SQLFORM(db.mytable) r

在模型中:

db.define_table('mytable',
                 Field('auto'),
                 Field('manual')
                )
db.mytable.auto.widget=SQLFORM.widgets.autocomplete(request,db.mytable.auto)
在控制器中:

def index():
    form = SQLFORM(db.mytable)
    return locals()
form.custom.widget['auto'][0].add_class('form-control')
结果:带有autocomplete的字段看起来很糟糕,好像没有任何CSS样式,而另一个字段看起来很好

如前所述,我可以在控制器中执行以下操作:

def index():
    form = SQLFORM(db.mytable)
    return locals()
form.custom.widget['auto'][0].add_class('form-control')
这也使得自动完成的字段看起来不错

但是,自动完成小部件提供与其他输入字段相同的CSS友好标记难道不是正常行为吗?
还是我做错了什么?

引导3
formstyle
函数(这是web2py scaffolding应用程序中的默认
formstyle
)没有正确设置autocomplete小部件的样式(应予以纠正)

作为一种解决方法,如果希望样式影响从DAL模型生成的所有表单,还可以执行以下操作:

autocomplete = SQLFORM.widgets.autocomplete
db.mytable.auto.widget = \
    lambda f, v: autocomplete(request, db.mytable.auto)(f, v, _class='form-control')
或者,要制作专门的引导自动完成小部件用于任何字段,您可以执行以下操作:

def bootstrap_autocomplete(*args, **kwargs):
    widget = SQLFORM.widgets.autocomplete(*args, **kwargs)
    return lambda f, v: widget(f, v, _class='form-control')
db.mytable.auto.widget = bootstrap_autocomplete(request, db.mytable.auto)
然后,在定义模型时,可以执行以下操作:

def bootstrap_autocomplete(*args, **kwargs):
    widget = SQLFORM.widgets.autocomplete(*args, **kwargs)
    return lambda f, v: widget(f, v, _class='form-control')
db.mytable.auto.widget = bootstrap_autocomplete(request, db.mytable.auto)

更新:自动完成小部件已经修复——它现在使用
formstyle
指定的样式,与其他表单小部件一样。因此,应该不再需要上述解决方法。

谢谢,Anthony。您的建议适用于直接生成的表单,但不适用于从网格或smartgrid生成的创建或编辑表单。在这种情况下,会发生非常奇怪的事情:在您键入autocomplete字段后,会显示父网格,而不是建议列表。首先,我无法使用smartgrid重现该问题,因此我建议打开一个新问题并显示您的代码。其次,您报告的问题与上述解决方案无关,该解决方案仅用于回答您关于向自动完成输入元素添加CSS类的问题。再次感谢。如果我使用
form=SQLFORM.smartgrid(db.mytable)
而不是
form=SQLFORM(db.mytable)
,您的解决方案就会失效,因此无需发布新问题。无论如何,我的问题是针对自动完成小部件的一般行为:IMHO它应该提供与所有其他生成表单相同的样式类,这样就不需要手动添加CSS类。我希望一些web2py核心开发人员对此发表评论。首先,我已经用
smartgrid
尝试了上述方法,正如前面提到的,我无法重现您描述的问题,因此如果您想解决该问题,您需要用代码发布一个新问题。其次,如果您只是想从核心开发人员那里获得关于可能的bug/潜在增强的评论,那么Stack Overflow不是合适的论坛。相反,您应该在上开始讨论或在上发布问题。