我想在需要时创建某些预定义的表格 - 比如当用户想要在应用程序中添加某个功能时。
我理解MODELS"描述数据表示" - 所以我想我的预定义表必须到这里。我在db.py
中尝试了这个:
def create_my_table():
db.define_table('mytesttable',
Field('mytest', 'text')
)
我不明白的是,如何称呼这种方法。这不起作用:
{{ =A('Create Table', _href = URL('create_my_table')) }}
答案 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>