And just to be clear, defining models in modules and defining modules using classes are two independent design decisions -- you can use classes even in regular model files, and you can use modules without using classes. If you want, you can just use regular functions in modules:
*/modules/mymodule.py:* from gluon import Field def mymodels(db): db.define_table('table1', Field('field1'), Field('field2')) db.define_table('table2', Field('field1'), Field('field2')) */models/db.py or /controllers/some_controller.py:* from mymodule import mymodels mymodels(db) If you just want to take some existing table definitions and move them from a model file to a module, the above is a simple approach. Anyway, it's just Python -- do it however you like. :-) Anthony On Tuesday, May 15, 2012 3:41:53 PM UTC-4, rochacbruno wrote: > > Better example: > > *# models/db.py* > ... > db = DAL(".....") > ... > > *# modules/datamodels/base.py* > > class BaseModel(object): > def define_table(self): > self.db.define_table(self.tablename, *self.fields, **self.params) > > *# modules/datamodels/dog.py* > > from gluon import current > from gluon.dal import Field > from datamodels.base import BaseModel > > class Dog(BaseModel): > def __init__(self, db): > self.db = db > self.T = current.T > self.request = current.request > self.tablename = "dog" > > self.fields = [ > Field("name", label=self.T("Dog name")), > Field("guardian", "reference guardian"), > .... > ] > > self.params = dict( > migrate=True, > format="%(name)s" > ) > > > *# modules/datamodels/guardian.py* > > from gluon import current > from gluon.dal import Field > from datamodels.base import BaseModel > > class Guardian(BaseModel): > def __init__(self, db): > self.db = db > self.tablename = "guardian" > self.fields = [ > Field("name") > ] > > self.params = dict(migrate=True) > > > *# models/guardian/0.py > > *from datamodels.guardian import Guardian > guardian = Guardian(db) > guardian.define_table() > > *# models/dog/0.py* > > from datamodels.dog import Dog > from datamodels.guardian import Guardian > > # dogs does not have owners, they have guardians! > guardian = Guardian(db) > guardian.define_table() > > # dog have reference to guardian, so need to define it before > dog = Dog(db) > dog.define_table() > > *# controllers/guardian.py* > > def index(): > return db(db.guardian).select(0 > > *# controller/dog.py* > > def index(): > return db(db.dog.guardian == db.guardian.id).select() > > It could be a little better, a singleton, a way to define references > automatically etc... > >