0

Trying to create a database and getting the following error:

File "XXXXX/flask/lib/python2.7/site-packages/sqlalchemy/orm/relationships.py", line 1987, in _determine_joins
    "expressions." % (self.prop, self.secondary)) NoForeignKeysError: Could not determine join condition between parent/child tables on relationship PostReply.tags - there are no foreign keys linking these tables via secondary table 'postReplyTags'.  Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify 'primaryjoin' and 'secondaryjoin' expressions.

A bit more about this database and the relevant parts. It has posts and post replies, both of which you can add tags.

It is set up like the following:

postTags = db.Table('postTags',
    db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
    db.Column('post_id', db.Integer, db.ForeignKey('post.id'))
)

postReplyTags = db.Table('postReplyTags',
    db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
    db.Column('postreply_id', db.Integer, db.ForeignKey('postreply.id'))
)

class Post(db.Model):
    __searchable__ = ['post_text']

    id = db.Column(db.Integer, primary_key=True)
    post_text = db.Column(db.String(256))
    tags = db.Column(db.String(64))
    #post_image: to be added
    post_time = db.Column(db.Integer)
    post_reply_number = db.Column(db.Integer) #to be taken out
    number_of_replies = db.Column(db.Integer)
    post_score = db.Column(db.Integer)
    post_rank = db.Column(db.Integer)
    flagged = db.Column(db.Integer)
    admin_post = db.Column(db.Boolean)
    company_name = db.Column(db.String(64))

    tagged = db.relationship('Tag', secondary=postTags,
        backref=db.backref('posts', lazy='dynamic'))
    #has user
    user_id = db.Column(db.String, db.ForeignKey('user.email'))

    def __repr__(self):
        return '<User %r>' % self.post_text

    def as_dict(self):
        return {c.name: getattr(self, c.name) for c in self.__table__.columns}

class PostReply(db.Model):
    __searchable__ = ['reply_text']

    id = db.Column(db.Integer, primary_key=True)
    associated_post_id = db.Column(db.Integer)
    reply_text = db.Column(db.String(256))
    tags = db.Column(db.String(64))
    #post_image: to be added
    reply_time = db.Column(db.Integer)
    flagged = db.Column(db.Integer)
    #has user
    user_id = db.Column(db.String, db.ForeignKey('user.email'))
    tags = db.relationship('Tag', secondary=postReplyTags,
        backref=db.backref('post_replies', lazy='dynamic'))

    def __repr__(self):
        return '<User %r>' % self.post_text

    def as_dict(self):
      return {c.name: getattr(self, c.name) for c in self.__table__.columns}

class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    post_id = db.Column(db.Integer, db.ForeignKey('post.id'))
    postreply_id = db.Column(db.Integer, db.ForeignKey('postreply.id'))
    name = db.Column(db.String(64))

Strangely enough, everything for posts works but post replies does not. Can anyone help me figure out why this is occurring? This is a many to many relationship for tags and posts/post replies? Many thanks!

1 Answer 1

2

Turns out things in camel case don't work and need to be converted with an underscore. For example, postReply to post_reply

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.