【发布时间】:2021-03-20 21:17:20
【问题描述】:
我正在尝试做的事情可能很简单,但我至少花了几个小时来解决这个问题,我可能只是在这里过于复杂了,但我希望得到一些帮助,加分细化。
注意:我已阅读此内容,并尝试根据接受的答案整合我认为对我来说解决方案的内容,但由于某种原因我仍然无法解决此问题
class Orders(db.Model)
id = db.Column(db.Integer, primary_key=True)
dest_address = db.relationship('Address', backref='orders')
from_address = db.relationship('Address', backref='orders')
class Address(db.Model)
id = db.Column(db.Integer, primary_key=True)
order_id = db.Column(db.Integer, db.ForeignKey('orders.id'))
所以基本上,我想要一个特定模型中的 2 个单独的一对一关系,每个关系指向同一个模型,我不完全确定如何正确地做到这一点
我尝试将is_dest_address = db.Column(db.Boolean, default=True) 字段添加到我的地址类并在关系中指定primaryjoin 条件,以及在关系中定义foreign_keys 参数(foreign_keys 参数为Address.id)
但我不完全确定如何正确执行此操作。
另外,值得一提的是,我的User 模型与Orders 模型有关系,也与Address 模型有关系
我也试过这个,感觉是我试过的所有东西中最接近的:
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
is_dest_address = db.Column(db.Boolean, default=True)
class Orders(db.Model):
id = db.Column(db.Integer, primary_key=True)
dest_address_id = db.Column(db.Integer, db.ForeignKey('address.id'))
from_address_id = db.Column(db.Integer, db.ForeignKey('address.id'))
dest_address = db.relationship('Address', backref='orders', uselist=False, foreign_keys=[dest_address_id])
from_address = db.relationship('Address', backref='orders', uselist=False, foreign_keys=[from_address_id])
我得到这个错误: sqlalchemy.exc.AmbiguousForeignKeysError:无法确定关系 Orders.from_address 上的父/子表之间的连接条件 - 有多个外键路径链接表。指定 'foreign_keys' 参数,提供应计为包含对父表的外键引用的列的列表。
理想情况下,我可以只使用后一个代码并指定 primaryjoin 或类似的东西,以根据 is_dest_address 是否为真/假来确定哪个地址存储为哪个字段/关系
注意:据我所知,我正在做的正是文档中所说的 https://docs.sqlalchemy.org/en/14/orm/join_conditions.html
【问题讨论】:
-
我仍然不确定如何解决这个问题,我尝试将 2 个外键指定为数据库字段,以及让关系指向这些外键,但我仍然收到错误消息.我假设解决方案相当简单,但由于某种原因我没有得到它。我还查看了许多类似的 SO 帖子,并尝试在我的上下文中实施这些解决方案,但我还没有找到不会给我错误的解决方案。
标签: flask orm sqlalchemy foreign-keys flask-sqlalchemy