【问题标题】:How to set the default option value in SingleSelectField?如何在 SingleSelectField 中设置默认选项值?
【发布时间】:2014-08-12 08:47:50
【问题描述】:

我是 Turbogears 2.3.3 和 Toscawidgets 2 的新手。谁能告诉我如何根据 id 设置默认值?

网址:.../view?id=2

FormWidget

FruitForm(twf.Form):  
    class child(twf.TableLayout):  
        fruit=twf.SingleSelectField(options=DBsession.query(Fruit.id, Fruit.name)  

型号:水果
身份证,姓名

控制器

@expose ('view')  
def view(self, id)  
    fruit=DBSession.query(Fruit).get(id)  
    return dict(page='view', value=fruit, form=FruitForm(action='/save')  

模板

<div>${form.display(value=value)}</div>  

问题
当url为/view?id=2时,SingleSelectField中如何显示id为2的水果?

谢谢。

【问题讨论】:

    标签: python turbogears2 toscawidgets


    【解决方案1】:

    你的sn-p可能有两个错误:

    首先是options 是在不使用Deferred 的情况下加载的,这会导致查询在应用程序启动时执行(当导入表单时),而不是在显示表单时执行,这可能不是您想要的。

    第二个是您将水果本身设置为表单值,而表单的值应该是子值的字典(因为表单实际上有多个值,每个子值一个)。

    我在 Runnable 上创建了一个可能可行的解决方案的简短示例:http://runnable.com/U-tO4xSN7Ch6wWS7/turbogears-forms-fill-singleselect-value-for-pythonpos

    【讨论】:

    • 谢谢@amol。使用Deferred 真的救了我一天。关于第二件事,我按照官方网站上的 turbogears cookbook 阅读,所有字段都必须在 Child 类中指定。在我上面的例子中,除了单选字段之外,我还有一些其他字段。我的问题是如果BirthdayFormFruitForm 的孩子,如何将参数传递给birthday
    • child子类中指定字段是正确的,它允许保持分离的布局和表单本身,但它不会改变表单的行为。我更新了示例以使用Form-&gt;TableLayout 层次结构,但您仍然需要将表单的值作为dict 传递:form_values=dict(birthday=today)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 2011-04-26
    • 2017-04-30
    • 2014-06-25
    • 2021-01-13
    相关资源
    最近更新 更多