如果同一个外键有2个字段,如何声明一对多

时间:2010-08-23 09:40:28

标签: python sqlalchemy pylons one-to-many

我是python(sqlalchemy)的新手,我正在学习用pylons和sqlalchemy构建网站。

当我宣布模型之间的关系时,我遇到了问题。我试了好几个小时,但都失败了。但我认为这应该是一个基本问题。

我有两个类:用户和文章,用户可以创建文章,并修改其他人的文章(如维基)。 因此,用户创建了文章和编辑文章。

class Article(Base):
    __tablename__ = 'articles'

    id = Column(Integer, primary_key=True)
    title = ...

    user_id = Column(Integer, ForeignKey('users.id'))
    editor_id = Column(Integer, ForeignKey('users.id'))

    # relations
    user = relationship('User', backref='articles') # -> has error


class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True)
    name = Column(String(20))

    def __init__(self):
        pass

但是显示错误:

InvalidRequestError: One or more mappers failed to compile. Exception was probably suppressed within a hasattr() call. Message was: Could not determine join condition between parent/child tables on relationship Article.user. Specify a 'primaryjoin' expression. If this is a many-to-many relationship, 'secondaryjoin' is needed as well.

我尝试将primaryjoin添加到该行('有错误'),但不知道它应该是什么。我尝试了一些代码,但都没有。

提前谢谢!

1 个答案:

答案 0 :(得分:2)

啊,那很明显。

Article类有两个对User,user_id和editor_id的引用,因此SQLA不知道它们中的哪一个用于您的关系。只需使用显式的primaryjoin:

user = relation('User', backref='articles', primaryjoin="Article.user_id==User.id")