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 <wlfr...@ix.netcom.com>wrote: > On Fri, 21 Sep 2012 17:54:06 -0400, Rohit Banga > <iamrohitba...@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/ => server.localhost:8080 > http://mathematics.server.localhost/ => server.localhost:8081 > or > http://physics.server.localhost/ => > 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 > wlfr...@ix.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-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.