我有这种多对多关系可以正常工作。但是,现在我需要另一个与这种多对多相关的类。
currencies = db.Table('currencies_many',
db.Column('id', db.Integer, primary_key=True),
db.Column('currency_id', db.Integer, db.ForeignKey('currencies.id')),
db.Column('bank_id', db.Integer, db.ForeignKey('banks.id'))
)
class Bank(db.Model):
__tablename__ = 'banks'
id = db.Column(db.Integer, primary_key=True)
bank_name = db.Column(db.String(300))
currencies = db.relationship('Currency', secondary=currencies,
backref=db.backref('banks', lazy='dynamic'))
class Currency(db.Model):
__tablename__ = 'currencies'
id = db.Column(db.Integer, primary_key=True)
currency_name = db.Column(db.String(300))
我的意思是,例如,一个订单,我需要多对多的关联。
class Order(db.Model):
__tablename__ = 'orders'
id = db.Column(db.Integer, primary_key=True)
bank_currency_identification = db.Column(db.Integer, db.ForeignKey('currencies_many.id'))
我怎样才能做到这一点?在我的例子中,我没有
db.relationship
为 bank_currency_identification
, 它是正确的?
最佳答案
所以如果我正确理解你的问题,你想引用 currencies_many
来自您的表 orders
table 。如果是这样,那么您与 currencies_many
的外键关系是正确的。 table 。
然而,当你想查询 orders
时,你可能会遇到一些麻烦。来自您的 banks
table 。我建议,虽然看起来多余,但在 Order
之间建立一对多的关系。和 Bank
以及在Order
之间和 Currency
.
bank_id = db.Column(db.Integer, db.ForeignKey('bank.id'))
currency_id = db.Column(db.Integer, db.ForeignKey('currency.id'))
然后在
Bank
类(class)orders = db.relationship('Order', backref='bank')
这为您提供了一个更清晰的查询界面。
bank_orders = bank.orders
以及使您的数据模型更清洁。不得不从也包含货币的中间表查询订单会很尴尬。只是我的两分钱,但是拥有一个易于理解的数据模型比建立尴尬的关系来节省一些冗余要好。
关于python-2.7 - 将关系设置为多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32736446/