Python 如何最好地将数据库对象传递给turbogears WidgetList?

Python 如何最好地将数据库对象传递给turbogears WidgetList?,python,turbogears,Python,Turbogears,我试图设置表单小部件,以便向数据库添加一些对象,但我遇到了困难,因为似乎无法将任何参数传递给WidgetList中包含的小部件。为了澄清这一点,以下是我的WidgetList: class ClientFields(forms.WidgetsList): """Form to create a client""" name = forms.TextField(validator=validators.NotEmpty()) abbreviated = forms.Tex

我试图设置表单小部件,以便向数据库添加一些对象,但我遇到了困难,因为似乎无法将任何参数传递给WidgetList中包含的小部件。为了澄清这一点,以下是我的WidgetList:

class ClientFields(forms.WidgetsList):
    """Form to create a client"""

    name = forms.TextField(validator=validators.NotEmpty())
    abbreviated = forms.TextField(validator=validators.NotEmpty(), attrs={'size':2})
    address = forms.TextArea(validator=validators.NotEmpty())
    country = forms.TextField(validator=validators.NotEmpty())
    vat_number = forms.TextField(validator=validators.NotEmpty())
    email_address = forms.TextField(validator=validators.Email(not_empty=True))
    client_group = forms.SingleSelectField(validator=validators.NotEmpty(),
                                       options=[(g.id, g.name) for g in ClientGroup.all_client_groups().all()])
你看,我不得不求助于从WidgetList内的数据库中获取对象,这意味着它与数据库代码紧密耦合,即使它在模型中使用classmethod

问题是,一旦创建了WidgetList实例,您就无法访问这些字段,否则我可以从控制器调用client_fields.client_group.options=[key,value]——这些字段将从类中删除并添加到列表中,以便再次找到它们,我必须遍历该列表才能找到我想要更改的字段类——而不是clean。以下是我查看WidgetsList时ipython的输出:

In [8]: mad.declared_widgets Out[8]: [TextField(name='name', attrs={}, field_class='textfield', css_classes=[], convert=True), TextField(name='abbreveated', attrs={'size': 2}, field_class='textfield', css_classes=[], convert=True), TextArea(name='address', rows=7, cols=50, attrs={}, field_class='textarea', css_classes=[], convert=True), TextField(name='country', attrs={}, field_class='textfield', css_classes=[], convert=True), TextField(name='vat_number', attrs={}, field_class='textfield', css_classes=[], convert=True), TextField(name='email_address', attrs={}, field_class='textfield', css_classes=[], convert=True), SingleSelectField(name='client_group', attrs={}, options=[(1, u"Proporta's Clients")], field_class='singleselectfield', css_classes=[], convert=False)]
那么……在不将这些小部件和WidgetList与数据库紧密耦合的情况下设置它们的正确方法是什么呢?

A可能会有所帮助。

此代码基于该页面中的所有代码,是的。但是它根本没有任何DB代码——也就是说,字段都是静态的。其中没有SingleSelectFields。。。