Hi All,
I have a bit of an issue that I'd like to kick around here before I start
diving into it...
I'm using the multi-db branch, which I've recently merged all of the latest
stuff in trunk into. It's all working quite nicely, my app runs on
PostgreSQL and I have to talk to an Oracle database as well (read only). My
problem is this; the legacy Oracle database has just been split into 2 dbs,
the split is by geographical region. So what I have now is 2 databases with
the same schema (and therefore the same models), and I need to get
information out of all of them! Here are the relevant models as they stand
at the moment:
### This is the "join table" (it's not really cos it spans a database) in my
app
class OSSTicketItem(models.Model):
"""Manual m2m table to refer to RANObjects from the netact app"""
abrevs = ('RNC', 'WBTS') #This is a filter so I only get the types I'm
interested in
def __str__(self):
return "Ticket: %s, RANObject id: %s" % (self.ticket.id,
self.ran_object)
ticket = models.ForeignKey('Ticket', related_name='ticket_items')
ran_object = models.CharField("RANObject", max_length='30')
### This is the object in the Oracle db I'm interested in
class RANObject(models.Model):
def __str__(self):
return self.dn or self.name or 'No Name'
CO_STATE_DICT = {
0: 'Operational',
2: 'Created from the network',
3: 'Non-operational',
9: 'To be deleted'
}
gid = models.IntegerField(primary_key=True, db_column="CO_GID")
int_id = models.IntegerField(db_column="CO_INT_ID")
parent = models.ForeignKey('self',related_name='children',\
db_column='CO_PARENT_GID',to_field='gid')
object_type = models.ForeignKey(RANObjectType, related_name='type_set',
\
db_column="CO_OC_ID")
CO_TC_ID = models.IntegerField(null=True, blank=True)
CO_SC_NAME = models.TextField(blank=True)
CO_DI_TOKEN = models.IntegerField()
co_state = models.IntegerField(null=True, blank=True,
db_column="CO_STATE")
CO_OBJECT_INSTANCE = models.TextField(blank=True)
name = models.TextField(blank=True, db_column="CO_NAME")
#CO_OC_VENDOR = models.TextField(blank=True)
CO_OCV_SYS_VERSION = models.TextField(blank=True)
CO_TIME_STAMP = models.DateTimeField()
CO_SYSTEM_ID = models.IntegerField(null=True, blank=True)
dn = models.TextField(blank=True, db_column="CO_DN")
#CO_PARENT_GID = models.IntegerField(null=True, blank=True)
CO_MF_GID = models.IntegerField(null=True, blank=True)
maint_region = models.ForeignKey
('self',related_name='network_elements',\
null=True, blank=True, to_field='gid', db_column="CO_MR_GID")
site_object = models.ForeignKey(Site, related_name='ran_objects',
null=True,\
blank=True, to_field='gid', db_column="CO_SO_GID")
CO_SN_GID = models.IntegerField(null=True, blank=True)
CO_USER_DEF_STATE = models.TextField(blank=True)
CO_USER_DEF_ID = models.TextField(blank=True)
host = models.TextField(blank=True, db_column="CO_MAIN_HOST")
CO_ADMIN_STATE = models.IntegerField()
CO_MAINTENANCE_MODE = models.IntegerField()
CO_DB_TIME_STAMP = models.TimeField()
@property
def state(self):
return self.CO_STATE_DICT[self.CO_STATE]
@property
def active_alarms(self):
return self.alarms.filter(ALARM_STATUS=1).count()
class Meta:
db_table = 'utp_common_objects'
# Yes it's a horrible nasty schema!!
The RANObject (and all of the other classes in that app) will be present in
two separate databases and I therefore need to be able to refer to both from
the same model...
My options as I see them are:
Another field (db = models.CharField('oracle db', max_length=10) ) in the
OSSTicketItem which is a the key to the database (i.e. the
settings.OTHER_DATABASES), this will tell me where the object in question
lives. Now I need to get the other information from the database... so what
do I do?
- A custom manager with a method that allows setting the db (via the
ConnectionInfoDescriptor) on the fly?
- A metaclass that changes the internals of the models in the Oracle
db(s) to allow specifying which db to look in?
- Both of the above?
- Witchcraft and Voodo?
- Any other ideas?
This is a fairly interesting problem here, and I recognize that it's WAY out
of spec for what django was designed for!!! If anyone's got any ideas, I'm
all ears!!
TIA,
Ben
--
Regards,
Ben Ford
[EMAIL PROTECTED]
+628111880346
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---