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)

-- 



Reply via email to