0

我对 web2py 非常陌生,我的应用程序需要更多经验。我的任务是“简单的”。

我想创建一个应用程序,用户可以在其中插入具有 3 个字段的表。我的表 field_1 对于 field2 和 field3 的某些值是相同的。第一个解决方案是在字段属性中定义表以使用 IS_IN_SET 但从项目开始就无法知道字段 1 的值。第二种解决方案是使用 SQLFORM.factory 创建表单,但在这种情况下,如果需要 field_1 中的新值,则用户无法添加它并且必须添加新的控制器 def。

我的第一个方法是使用提交表单创建一个新的 add_field1 表并连接到我的第一个表。

但是 .factory 中是否有任何属性可以为用户提供字段的下拉菜单,但也可以以相同的形式向该字段插入新记录?

4

2 回答 2

2

我不确定这是否是您要查找的内容,但在我看来,您希望有一个表单供用户向数据库添加值,该数据库具有一个填充有数据库值的下拉菜单。

如果是这种情况,那么您可以通过将其作为您的 sqlform 语句来做到这一点:

my_form = SQLFORM(db.my_table)

然后你可以定义 my_table 为:

define_table('my_table',
    Field('field1', 'reference other_table', requires=IS_IN_DB(db, db.other_table, '%(field_name)s'),
)

这将创建一个表,当使用 sqlform 创建时,该表将提供一个表单,其中包含来自表 other_table 中的“field_name”列的值的下拉列表。

希望这可以帮助 :)

于 2013-08-27T17:43:17.653 回答
0

我不确定您是否可以在不知道字段开头的情况下获得字段下拉列表...

如何使用 web2py 中字段的参考定义。但它会自动假定您在数据库中拥有所有选择。因此,您将在同一页面上只有两个表单,一个用于添加选项,另一个用于选择一个选项。

一个示例是在表 myLine 中有一个字段,其颜色以另一种表颜色定义:

db.define_table('colors',
    Field('name','string'),
    Field('code','string'),
    format='%(name)s')
if db(db.colors).isempty():
    # create instance of table
    for k,v in dict(red="#FF0000",black="#000000",blue="#0000FF").items():
        db.color.insert(name=k,code=v)

db.define_table('myLine',
    Field('name','string'),
    Field('color','reference colors'))
于 2016-07-03T19:21:11.437 回答