Hello,
I want to make a hierarchy over a DB design as described in "Fundamentals
of database systems" from Elmasri & Navathe.
This implies that when I have some info which is shared for many
classes/tables, I can put it in a main parent table and use the main table
id as foreign key in the child tables, kind of a weak entity.
I tried using abstract and multitable inheritance (this last one doesn't
let me specify the OneToOneField, don't know where to find this at django
docs).
My example is right down here (one table per class):
'''I would like this to be abstract, because I will never instantiate
it,
but could be not if needed'''
class Person(models.Model):
personId = models.IntegerField(primary_key=True)
name = models.CharField(max_length=45)
surname = models.CharField(max_length=45, blank=True)
email = models.CharField(max_length=45, blank=True)
phone = models.CharField(max_length=15, blank=True)
class Meta:
managed = False
db_table = 'person'
class Alumn(Person):
# Maybe this one down should be OneToOne.
# alumnId == personId always true for the same real world guy
alumnId = models.ForeignKey('Person', db_column='alumnId',
primary_key=True)
comments = models.CharField(max_length=255, blank=True)
class Meta:
managed = False
db_table = 'alumn'
# There are more child classes (Client, Professor, etc....)
# but for the example this is enough
My target is achieving to create an Alumn in DB just with two sentences
like:
a = Alumn(personId=1,name='Joe', [...more params...] , alumnId=1,
comments='Some comments' )
a.save()
and having these two lines insert two rows: one for Person and one for
Alumn. The alumnId attribute in this snippet up here could be omitted,
because it will always be the same as the personId (I told you, like a weak
entity).
I'm quite a beginner at django but I have looked at the documentation and
proved some things with abstract=True in Person and not having succeeded I
guess now that I should mess with the __init__ constructors for getting the
superclass built and after that build the child class.
I don't know the right path to choose but definitely want not to alter the
database design. Please help.
Thanks in advance.
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/e25813f2-6205-4457-83fe-8fadffddda69%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.