Hi,
I'm looking for specific help with building an self-referential
relationship (adjacency?) inside of inherited ORM classes. I'm also looking
for a sanity check on the basic design of the classes since I'm not an
expert in SQL. This in the context of a Flask-sqlalchemy app resembling a
magazine or journal.
Here is the logic I'd like to express, briefly: There can be many kinds of
Writing. Articles are writing that are associated with Issues (not shown
here). Responses are writing that are linked to other writing, somewhat
like a conversation or exchange.
class Writing(Base):
# I could have all sorts of different genres
id = Column(Integer, primary_key=True)
# title
# text
# authors = many to many relation table
type = Column(String)
__mapper_args__ = {
'polymorphic_identity': 'writing',
'polymorphic_on': type
}
class Article(Writing):
id = Column(ForeignKey('writing.id'), primary_key=True)
# inherits some stuff from Writing
# Also defined here are columns relating to an Issue, resembling a
# Table of contents
# issue_id... Each article is associated with an Issue obj
# position... Each article has a position in the issue
__mapper_args__ = {
'polymorphic_identity': 'article', }
class Response(Writing):
# All responses are associated with Writing. Writing/Articles may have
# several responses
#
__tablename__ = 'response'
id = Column('id', ForeignKey('writing.id'), primary_key=True)
respondee_id = Column('respondee', ForeignKey('article.id'),
nullable=False)
# So, No, I don't know what I'm doing here...
respondee = relationship(
'Response', backref='respondant',
primaryjoin=('Writing.respondant' == 'Response.respondee'))
__mapper_args__ ={
'polymorphic_identity': 'response', }
And my exception:
sqlalchemy.exc.AmbiguousForeignKeysError: Can't determine join between
'writing' and 'response'; tables have more than one foreign key constraint
relationship between them. Please specify the 'onclause' of this join
explicitly.
Thank you for help and any feedback. I can throw a more detailed example on
gist if I need to. I am hoping the answer is obvious to more experienced
eyes.
Luke Thomas Mergner
Glendale, CA
@lmergner on twitter
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" 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/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.