apply this patch to history_meta.py
diff -r 7c65c0cdd3c8 examples/versioning/history_meta.py
--- a/examples/versioning/history_meta.py Tue Jun 14 19:57:21 2011 -0400
+++ b/examples/versioning/history_meta.py Thu Jun 16 12:04:43 2011 -0400
@@ -35,7 +35,7 @@
col.unique = False
if super_mapper and col_references_table(column,
super_mapper.local_table):
- super_fks.append((col.key,
list(super_history_mapper.base_mapper.local_table.primary_key)[0]))
+ super_fks.append((col.key,
list(super_history_mapper.local_table.primary_key)[0]))
cols.append(col)
as you can see, the foreign key generation is pulling from the "base" mapper
which isn't the case in a multilevel situation, it needs to pull the FKs from
the immediate super-mapper.
On Jun 16, 2011, at 11:20 AM, JPLaverdure wrote:
> Hello,
>
> I'm trying to use the versioning recipe describe on the website along
> with a multi-level inheritance model (Joined-Table inheritance)
>
> Here are my declarative statements:
>
> [code]
> class Sample(Base):
> __metaclass__ = VersionedMeta
> __tablename__ = 'sample'
> __table_args__ = {'schema': 'test'}
>
> id = Column(Integer, primary_key=True)
> discriminator = Column('type', String(50))
> token = Column(String(128), nullable=False)
> source_sample_id = Column(Integer, ForeignKey('test.sample.id'))
>
> children = relationship("Sample", backref=backref('source_sample',
> remote_side=id), single_parent=True)
>
> __mapper_args__ = {'polymorphic_on': discriminator,
> 'polymorphic_identity':'sample'}
>
> def __init__(self, token, source_sample_id=None):
> self.token = token
> self.source_sample_id = source_sample_id
>
> class Tissue(Sample):
> __metaclass__ = VersionedMeta
> __tablename__ = 'tissue'
> __mapper_args__ = {'polymorphic_identity': 'tissue'}
> __table_args__ = {'schema': 'test'}
>
> id = Column(Integer, ForeignKey('test.sample.id'),
> primary_key=True)
> concentration = Column(String(32))
>
> def __init__(self, token, concentration, source_sample_id=None):
> super(Sample, self).__init__(token, source_sample_id)
> self.concentration = concentration
>
> class LeukemicTissue(Tissue):
> __metaclass__ = VersionedMeta
> __tablename__ = 'leukemic_tissue'
> __mapper_args__ = {'polymorphic_identity': 'leukemic_tissue'}
> __table_args__ = {'schema': 'test'}
>
> id = Column(Integer, ForeignKey('test.tissue.id'),
> primary_key=True)
> leukemia = Column(String)
>
> def __init__(self, token, concentration, leukemia,
> source_sample_id=None):
> super(Tissue, self).__init__(token, concentration,
> source_sample_id)
> self.leukemia = leukemia
> [/code]
>
>
> Whenever I try to "create_all()" I get the following error:
> sqlalchemy.exc.ArgumentError: Can't find any foreign key relationships
> between 'tissue_history' and 'leucegene_tissue_history'.
>
> Single level-inheritance works beautifully (ie if I stop at "Tissue"
> and don't declare the "LeukemicTissue") but I really need a multi-
> level inheritance scheme to work..
>
> Can anyone give me any pointers ?
>
> Thanks !!
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" 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/sqlalchemy?hl=en.
>
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" 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/sqlalchemy?hl=en.