What I did is create an attribute in my models and called it

model.py
class Data(models.Model):
   # connection_name is my database name which points to the name from
settings.py
    connection_name = "gis"

    name = models.CharField(max_length=50)
    area = models.IntegerField()

and created a router.py
class DbRouter(object):

    """A router to control all database operations on models in
    the contrib.auth application"""

    def db_for_read(self, model, **hints):
        if hasattr(model,'connection_name'):
            return model.connection_name
        return None

    def db_for_write(self, model, **hints):
        if hasattr(model,'connection_name'):
            return model.connection_name
        return None

    def allow_syncdb(self, db, model):
        if hasattr(model,'connection_name'):
            return model.connection_name == db
        return db == 'default'


so, everytime for read or write operation it will check the model for
attribute connection_name and if not found it will use the default.

hope this will help,
cheers,

On Fri, Sep 2, 2011 at 1:23 PM, Kevin <kveron...@gmail.com> wrote:

> The only solution I can directly think of, since the SITE_ID is in
> settings.py would be to use some python logic to determine the
> database for that site.
>
> eg.
> if SITE_ID == 1:
>   ...  Database settings for site 1 here ...
>
> Use an if-then like this in your settings.py.
>
> Now if what your going after is storing the SITE_ID in a user's
> profile and using that for routing, this will be more complex, as you
> will need to code a new databasebackend to perform the routing, and
> perhaps some middleware and an authbackend.
>
> Mind you, I haven't done much work on multiple databases, so these are
> just ideas on how I think it might be done.
>
> On Sep 1, 9:54 pm, Terribyte <mdra...@gmail.com> wrote:
> > I had a kind of crazy idea and I wanted to bounce it off of some
> > people with a lot more django experience than I.
> >
> > Here's my scenario...
> >
> > I would like 1 code base, this code base services potentially hundreds
> > of businesses, each of which I want to have a copy of the same schema
> > but with data only relevant to that business.
> >
> > Basically my idea is the following
> > If the model is a Site object or User object, route to the default
> > database, otherwise route reads and writes to a database name I'll set
> > in the sites table.
> >
> > The trick is I need to set the SITE_ID for the current request, and
> > I'm not sure exactly When that should happen (after login of course),
> > or if this idea is even workable.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to