如何在运行时创建DB-Tables

时间:2014-12-03 12:04:39

标签: web2py

我想在需要时创建某些预定义的表格 - 比如当用户想要在应用程序中添加某个功能时。

我理解MODELS"描述数据表示" - 所以我想我的预定义表必须到这里。我在db.py中尝试了这个:

def create_my_table():
    db.define_table('mytesttable',
        Field('mytest', 'text')
            )

我不明白的是,如何称呼这种方法。这不起作用:

{{ =A('Create Table', _href = URL('create_my_table')) }}

1 个答案:

答案 0 :(得分:1)

默认情况下,URL标识该控制器内的控制器和功能,框架运行该功能(执行模型文件后)。您无法在模型文件中定义函数,然后通过在URL中包含其名称来调用该函数。相反,您应该将该功能放在控制器中,或者从控制器调用您的功能。

另外,请注意虽然在模型文件中定义数据库模型很常见(通常因为多个控制器中经常需要给定模型),但您可以在任何地方定义模型,包括在控制器中。

另一种选择是使用条件模型功能。例如,您可以在default.py控制器中创建名为create_my_table的控制器操作。然后,您可以创建/models/default/create_my_table.py模型文件,并且只有在调用/ default / create_my_table操作时才会执行该模型文件(在这种情况下,没有理由将模型定义放在函数中 - 只需将它放在该模型文件的顶层)。您还可以使用response.models_to_run定义更复杂的条件模型执行。有关详细信息,请参阅相关的documentation

后一个选项可能更可取,因为在使用appadmin时,所有条件模型都会自动运行,因此您可以访问有条件定义的模型(appadmin将无法访问仅在特定控制器中定义的表)。 / p>