我有这种多对多的关系,可以正常工作。但是,现在我需要另一个与这个多对多关系的类。
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
,这是正确的吗?
答案 0 :(得分:2)
因此,如果我正确理解您的问题,您需要引用currencies_many
表中的orders
表。如果是这样,那么与currencies_many
表具有外键关系是正确的。
但是,如果您想从orders
表中查询banks
,可能会遇到麻烦。我建议,虽然看似多余,但要在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
班级
orders = db.relationship('Order', backref='bank')
这为您提供了更清晰的查询界面。
bank_orders = bank.orders
同时使您的数据模型更清晰。不得不从也包含货币的中间表中查询订单是很尴尬的。只是我的两分钱,但拥有一个易于理解的数据模型比制造尴尬的关系以节省一些冗余更好。