These examples are only good if you have 1 model per class. I prefer the
design used in Auth with a define_tables method.

On Tue, May 15, 2012 at 12:41 PM, Bruno Rocha <rochacbr...@gmail.com> 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...
>
>


-- 
-- 
Regards,
Bruce Wade
http://ca.linkedin.com/in/brucelwade
http://www.wadecybertech.com
http://www.fittraineronline.com - Fitness Personal Trainers Online
http://www.warplydesigned.com

Reply via email to