我对web2py很新,我的应用需要更多经验。 我的任务是“简单的”。
我想创建一个应用程序,用户可以在其中插入包含3 Field的表格。我的表field_1对于field2和field3的某些值是相同的。 第一个解决方案是使用字段属性中的define_table来使用IS_IN_SET,但是从项目开始就无法知道field_1值。 第二种解决方案是使用SQLFORM.factory创建表单,但在这种情况下,如果需要field_1中的新值,则用户无法添加它,并且必须添加新的控制器def。
我的第一个用途是创建一个带有submision表单的新add_field1表并连接到我的第一个表。
但是.factory中是否有任何属性可以为用户提供字段的下拉菜单,还可以以相同的形式向字段插入新记录?
泰
答案 0 :(得分: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”列的值的下拉列表。
希望这会有所帮助:)
答案 1 :(得分: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'))