Would it not be possible to create a base model and model manager that
specifies a client, and override the default django.db.models.Model
and django.db.models.Manager classes?  Something like this:

class Client(models.Model):
    client_name = models.CharField(max_length=64)
    # etc...

class ClientManager(models.Manager):
    def get_query_set(self):
        client = <current client - retrieved from middleware global?>
        return super(ClientManager,
self).get_query_set().filter(client=client)

class ClientModel(models.Model):
    """
    An abstract base class model that provides a link to client table
    """
    client = Client()

    class Meta:
        abstract = True

django.db.models.Model = ClientModel
django.db.models.Manager = ClientManager

I haven't tested this... this would need to be imported early, before
any of the apps are loaded, and in get_query_set one would need a way
to determine the client that corresponds with the current url - I
think some middleware that inspects the request should be able to
cache that away.

Anyone know if this is possible, or am I way off base?

Dan

On Oct 10, 2:34 pm, mguthrie <[EMAIL PROTECTED]> wrote:
> I've been looking into Django for building something that is more web
> application than it is website.  I understand that Django has been
> developed in a sort of CMS mindset but to date I haven't found any
> reason why it couldn't create non-content centric web apps as well.
>
> My project requirements are as follows:
>
> 1.) I need to be able to host this project for multiple clients.  No
> customization, just everybody using the same thing.  Therefore ideally
> they should all share the same codebase.
> 2.) Each client should have their own user table/authentication since
> I want client A to be able to have a user named john.doe and client B
> to as well.  I would not mind if they shared the same table but they
> needed to provide a client id so the login can differentiate.
> 3.) Media should be separate per client.  Client A media should not be
> mixed with Client B or vice versa.
> 4.) Database either needs to be single db per client or one large db
> with multiple prefixed tables per client.  So each client would get
> their own users table (or shared table with client id field), tables
> for data, etc.
>
> I've researched the options available and here's what I've found
> (correct me if I'm wrong):
> 1.) I can host each client separately by providing a different
> <Location> for each and specifying a different settings file.  This
> should allow me to specify separate DB's, media locations, etc but I'm
> concerned about the overhead of hosting them.  I've read that for each
> instance of Django requires another python interpreter.  If that is
> the case wouldn't I run out of RAM quickly hosting several clients?
> Is there a way I can do this using only one instance of Django?  If I
> use Django with multiple <Location>'s per client would that be one
> Django instance or multiple?  Is mod_python not the way to go for this
> project?
> 2.) I can use django.contrib.sites but every client shares the
> authentication.  Is there a way I can specify a client id to
> distinguish Client A's john.doe from Client B's?  If I do this can I
> specify where media for either would go?  How about they all share the
> same DB but have different table prefixes?
>
> I know it's a lot but I wanted to be as specific as I could so I don't
> waste someone's time. Is Django probably the wrong framework for this
> project?  Should this be a Pylons/Turbogears thing or what?
>
> All ideas/critiques/reworkings will be accepted.  Thanks in advance.
>
> -MG
--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to