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)
--