与继承 类 的多对一关系

Many to one Relationship with inherited Classes

我正在学习 Flask,目前正在使用 Flask 构建地址簿应用程序。使用 SQLAlchemy 实现我的模型时出现以下错误:

sqlalchemy.exc.AmbiguousForeignKeysError: Could not determine join condition between parent/child tables on relationship Company.contacts - there are multiple foreign key paths linking the tables. Specify the 'foreign_keys' argument, providing a list of those columns which should be counted as containing a foreign key reference to the parent table.

class Person(db.Model):
    __tablename__ = 'person'

    id = db.Column(db.Integer, primary_key=True)
    address = db.relationship('Address',
                              secondary=address_person,
                              backref=db.backref('persons', lazy='dynamic'),
                              lazy='dynamic')
    projects = db.relationship('Project',
                               secondary="project_person_link",
                               backref=db.backref('persons', lazy='dynamic'),
                               lazy='dynamic')
    phonenumbers = db.relationship('Phone', backref='Phonenumbers', lazy='dynamic')
    mails = db.relationship('Mail', backref='Mails', lazy='dynamic')


class Company(Person):
    id = db.Column(db.Integer, db.ForeignKey("person.id"), primary_key=True)

    title = db.Column(db.String(250))
    name = db.Column(db.String(250))
    group_id = db.Column(db.Integer, db.ForeignKey('group.id'))

    contacts = db.relationship('Contact', backref="company", lazy='dynamic')


class Contact(Person):
    id = db.Column(db.Integer, db.ForeignKey("person.id"), primary_key=True)
    title = db.Column(db.String(250))
    name = db.Column(db.String(250))
    christmas_card = db.Column(db.Boolean)
    picture = db.Column(db.String(250))

    company_id = db.Column(db.Integer, db.ForeignKey('company.id'))

我并没有真正看出我做错了什么,任何提示都会有所帮助。

谢谢!

我通过包含 primaryjoin 参数解决了我的问题。

class Company(Person):
    id = db.Column(db.Integer, db.ForeignKey("person.id"), primary_key=True)
    title = db.Column(db.String(250))
    name = db.Column(db.String(250))
    group_id = db.Column(db.Integer, db.ForeignKey('group.id'))

    contacts = db.relationship('Contact', backref="company", primaryjoin="Company.id==Contact.company_id")