flask-sqlalchemy:如何定义'评论' model(多个外键引用同一个表)?

时间:2014-12-06 13:12:54

标签: sqlalchemy flask-sqlalchemy

我正在开发一个视频共享网站,用户可以根据视频发表评论,或评论其他人的评论。这是我的简化用户模型和评论模型:

class User(db.Model):
    __tablename__ = 'users'
    id              = db.Column(db.Integer, primary_key=True)
    username        = db.Column(db.String(MAX_USERNAME), unique=True)
    comments        = db.relationship('Comment', backref='replier', lazy='dynamic')
    replied         = db.relationship('Comment', backref='repliee', lazy='dynamic')

class Comment(db.Model):
    __tablename__ = 'comments'
    id              = db.Column(db.Integer, primary_key=True)
    content         = db.Column(db.Text)
    replier_id      = db.Column(db.Integer, db.ForeignKey('users.id'), index=True)
    repliee_id      = db.Column(db.Integer, db.ForeignKey('users.id'), index=True)
    video_id        = db.Column(db.Integer, db.ForeignKey('videos.id'), index=True)

它提示我错误:

  

无法确定关系User.comments上的父/子表之间的连接条件 - 有多个链接表的外键路径。指定'foreign_keys'参数,提供那些应计为包含对父表的外键引用的列的列表

有人可以帮忙吗?烧瓶和sqlalchemy的新手。

1 个答案:

答案 0 :(得分:1)

commentsreplied关系不知道要Comment使用哪个外键列,因为replier_idrepliee_id都是指users.id

因此,请向foreign_keyscomments添加相应的replied参数:

comments = db.relationship('Comment', backref='replier', lazy='dynamic', foreign_keys='[Comment.replier_id]')
replied = db.relationship('Comment', backref='repliee', lazy='dynamic', foreign_keys='[Comment.repliee_id]')