The easy way is /models/ ..... nothing here ...
/modules/mymodels.py from gluon import current from gluon.dal import DAL, Field def define_my_tables(*table_list): db = DAL("........") tables_definitions = { "owner": {"fields": [Field("name"), Field("gender")], "format": "%(name)s", "migrate": True} "car": {"fields": [Field("name"), Field("owner", "reference owner)], "format": "%(name)s", "migrate": True} } if not table_list: table_list = tables_definitions.keys() for tablename in table_list: fields = tables_definitions.get(tablename, {}).get("fields", []) format = tables_definitions.get(tablename, {}).get("format") migrate = tables_definitions.get(tablename, {}).get("migrate") db.define_table(tablename, *fields, **dict(migrate=migrate, format=format)) return db /controllers/default.py def list_owners(): from mymodels import define_my_tables db = define_my_tables("owner") rows = db(db.owner).select() return dict(rows=rows) def list_cars(): from mymodels import define_my_tables db = define_my_tables("car") rows = db(db.owner).select() return dict(rows=rows) def list_cars_and_owners(): from mymodels import define_my_tables db = define_my_tables("owner", "car") # owner comes first because of reference owners = db(db.owner).select() cars = db(db.car).select() return dict(owners=owners, cars=cars) Do not testes, but should work, and does not have a lot of class based code. (but you can be more DRY and wise if put it in to a class based scheme) --