class BaseModel(models.Model):
    type = models.ForeignKey(ContentType, editable=False)

def save(self, force_insert=False, force_update=False):
    if self.type_id is None:
        self.type = ContentType.objects.get_for_model(self.__class__)
super(BaseModel, self).save(force_insert, force_update)

def get_instance(self):
    return self.type.get_object_for_this_type(id=self.id)
Making a multi-table inheritance design generic in Django