As to whether it's a bug or not I have no idea, though it seems so. If you use:
entity = models.OneToOneField(Entity, parent_link=True, primary_key=True) it will create the primary key in both Kid and Adult tables, which sounds like what you want? On Tue, Sep 28, 2010 at 1:06 PM, phill <famousactr...@gmail.com> wrote: > This looks quite a bit like a bug, but we may be off the reservation > in terms of how we're using the product. (Disclaimer: I'm relatively > new to Django, and extremely new to the codebase that I ran into this > on). > > We've got a form of schema-inheritance going on in this project in > order to accomplish shared-id-space and the ability to relate models > to one of a number of different types. The way that we've broken it > out runs us into a strange inconsistency in Django that specifically > affects our ability to serialize the objects. Here's a simplified > version of what we're doing: > > class Entity(models.Model): > entityType = models.CharField(editable=False,max_length=50) > > def __init__(self, *args, **kwargs): > super(Entity, self).__init__(*args, **kwargs) > self.entityType = self.__class__.__name__ > > def __unicode__(self): > return 'Entity: %s %s' %(self.entityType, self.id) > > class BasePerson(Entity): > > entity = models.OneToOneField(Entity, parent_link=True) > name = models.CharField(max_length=50) > > class Meta: > abstract = True > > class Kid(BasePerson): > school = models.CharField(max_length=50) > > class Adult(BasePerson): > job = models.CharField(max_length=50) > > > > When I dump instances of these models out using the standard fixtures > serialization, instances of Kid will serialize the 'entity' field, but > instances of Adult won't. The reason is because Adult's entity field > is marked primaryKey=True. Kid's is not. There appears to be a caching > issue here, because if I swap the order that Kid and Adult are defined > in.. the error reverses (now Kid's field will be marked pk). > > Is this a bug? If not, what's the reasoning behind this behavior? Is > there a better pattern for accomplishing this kind of inheritance? > > Thanks in advance for your help. > > Phill > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-us...@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-us...@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.