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

2024-04-26 23:35:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图设置表单小部件来向数据库添加一些对象,但是我遇到了困难,因为似乎不可能向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)。在

一旦创建了客户端,你就不能访问这些字段了(否则我就不能调用这些字段了_fields.client_组.options=[(key,value)]—这些字段从类中删除并添加到一个列表中,因此要再次找到它们,我必须遍历该列表以找到我想要的字段类改变-不干净。下面是ipython在查看WidgetsList时的输出:

^{pr2}$

那么…什么是正确的方法来设置这些小部件和WidgetLists而不将它们与数据库紧密耦合等等?在


Tags: 对象nameclient数据库部件addressformsall