Thats interesting Bill.
Are you talking about something like this?
http://stackoverflow.com/questions/3276700/django-model-subclass-without-changing-database-name

Thanks
Rohit Banga
http://iamrohitbanga.com/


On Sat, Sep 22, 2012 at 8:15 PM, Bill Beal <b.b...@eximflow.com> wrote:

> Question for an expert from a newbie:  Could you decorate each model that
> has data that needs to be separated by departments?  If so, you wouldn't
> have to remember to code the department filter on each retrieval.
>
>
> On Friday, September 21, 2012 10:06:35 PM UTC-4, Rohit Banga wrote:
>
>> Hi Dennis
>> Thanks for summarizing the contents of the mails.
>> Do you foresee any problems with the Model Inheritance scheme? At my end
>> I am stuck at getting a way to achieve dynamic polymorphism - which is
>> probably because I am new to Python.
>>
>> I can create a new subclass for every Department I add. manage.py syncdb
>> creates the new table for every new department I add. Now I want to
>> write the application logic agnostic of the specific department. I want to
>> load the appropriate subclass dynamically at runtime. I haven't been able
>> to do this right now.
>> I can afford to create a new subclass everytime and run manage.py syndb
>> after that but cannot rewrite all the application logic all over again.
>>
>> I feel given the subclass name there should be an easy way in python to
>> get the subclass itself which I should use for the current user.
>>
>> At this point I should also mention there are a set of about 5-6 tables
>> (department being just one example) that I need to replicate for each new
>> department. I am thinking of doing it all via subclassing. That is I would
>> need to load as many subclass objects dynamically given the name of the
>> department.
>> If I can get the set of subclasses to use with a not too ugly looking
>> code is it still a terrible idea?
>>
>> Thanks
>> Rohit Banga
>> http://iamrohitbanga.com/
>>
>>
>> On Fri, Sep 21, 2012 at 9:34 PM, Dennis Lee Bieber 
>> <wlf...@ix.netcom.com>wrote:
>>
>>>  On Fri, 21 Sep 2012 17:54:06 -0400, Rohit Banga
>>> <iamroh...@gmail.com> declaimed the following in
>>> gmane.comp.python.django.user:
>>>
>>> > Thanks Nikolas. I think my example was not clear.
>>> >
>>> > But all the code is shared between the departments (another reason for
>>> you
>>> > to say use the same tables!).
>>> > I do not need to have the explicit department name in the code. I don't
>>> > know the name of the departments yet! (It is just a metaphor)
>>> > I just want to add behavior like PhysicsDepartment.objects.**filter()
>>> or
>>> > create(), save()  anywhere I want.
>>> > I want to work with the base class while loading the data from the
>>> subclass
>>> > at runtime. Simple polymorphism but with different database tables in
>>> the
>>> > backend.
>>> >
>>>
>>>         I expect that over 95% of the responses will all emphasize using
>>> single set of tables, and a filter by the department (which is retrieved
>>> from the log-in authorization information)
>>>
>>>         Anything else means you have to somehow dynamically:
>>>
>>> 1)      use one database for authorization and; somehow OPEN a department
>>> database connection that the models will hook into instead of using a
>>> "load-time" database. That probably means you have to replace the Django
>>> database connection system with one that you call at run-time. IOW, you
>>> do not have a database configured in the normal manner -- but EVERY
>>> Django function that issues an SQL operation would have to do something
>>> like:
>>>
>>>         if not dbConnection:
>>>                 dbName = authuserdepartmentname
>>>                 dbConnection = whateverapi(database=dbName,..**.)
>>>
>>> where dbConnection is whatever Django normally uses to track the
>>> database connection.
>>>
>>>
>>> 2)      not use Django models defined at build time (ie, in code), but
>>> dynamically build the models at run-time so that you can specify the
>>> table name when accessed (sort of using code templates into which you
>>> substitute the needed table names which are then imported later -- good
>>> luck getting Django to recognize the validity of the models).
>>>
>>>
>>> 3)      operate separate "servers" for each department. Each server would
>>> have its own location for datafiles, but you can probably share the
>>> application code via soft-links or maybe even one shared code directory.
>>> This is workable for those databases that allow connections defined by
>>> file name/path (SQLite, embedded Firebird) but not for those using a
>>> dedicated database server (MySQL, PostgreSQL) -- because the file "name"
>>> will be fixed, but the data path would be relative to the "web server"
>>> URL. Of course, if you have many departments, you end up with many
>>> "servers" on different ports:
>>>
>>>         http://server.localhost:8080/   Physics
>>>         http://server.localhost:8081/   Mathematics
>>>
>>> or your server on port 80 rewrites URLs
>>>
>>>         
>>> http://physics.server.**localhost/<http://physics.server.localhost/>=> 
>>> server.localhost:8080
>>>         
>>> http://mathematics.server.**localhost/<http://mathematics.server.localhost/>=>
>>>  server.localhost:8081
>>> or
>>>         
>>> http://physics.server.**localhost/<http://physics.server.localhost/>=>
>>> http://server.localhost/**physics <http://server.localhost/physics>
>>>
>>> where the directory structure is something like
>>>
>>> physics/
>>>         app1    -> softlink to          common/app1
>>>         data/
>>>                 sqlite.db
>>>
>>> mathematics/
>>>         app1    -> softlink to          common/app1
>>>         data/
>>>                 sqlite.db
>>>
>>> and the path to the database is relative
>>>
>>>         ./data/sqlite.db
>>>
>>>
>>>         Option 1 is probably easier to create, since the table names
>>> don't
>>> change -- only the "department" database name changes. Creating the
>>> database for each new department means over-riding the admin "sync"
>>> logic since the database name has to be provided rather than extracted
>>> from a configuration field.
>>>
>>>         Options 1 and 2 require modifying core Django functionality --
>>> don't
>>> expect to be able to update Django without recreating the changed core,
>>> and don't expect to be able to use a hosting service that provides
>>> Django as you won't be able to change it with your modifications.
>>>
>>>         Option 3 restricts the type of database that can be used, and
>>> requires very heavy administration of the web server configuration, not
>>> just Django.
>>>
>>>
>>>         In contrast, using ONE database with just one set of tables, in
>>> which all records have a foreign key to the authorization data (which
>>> provides the department associated with the login), and having all views
>>> filter the data by that department is the solution that is the most
>>> natural scheme to maintain, and can be done within a single Django
>>> application (I use "application" here to mean the collective set of
>>> models and views -- not some code that handles just one web page)
>>> --
>>>         Wulfraed                 Dennis Lee Bieber         AF6VN
>>>         wlf...@ix.netcom.com    
>>> HTTP://wlfraed.home.netcom.**com/<HTTP://wlfraed.home.netcom.com/>
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Django users" group.
>>> To post to this group, send email to django...@googlegroups.com.
>>> To unsubscribe from this group, send email to django-users...@**
>>> googlegroups.com.
>>>
>>> For more options, visit this group at http://groups.google.com/**
>>> group/django-users?hl=en<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 view this discussion on the web visit
> https://groups.google.com/d/msg/django-users/-/_Cn_whm6R50J.
>
> 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