2015-09-23 38 views
5

Tôi có mối quan hệ nhiều-nhiều này hoạt động chính xác. Tuy nhiên, bây giờ tôi cần phải có một lớp khác với mối quan hệ với nhiều người này.Đặt mối quan hệ với mối quan hệ nhiều-nhiều

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)) 

Ý tôi là, ví dụ: đơn đặt hàng, tôi cần phải liên kết với nhiều người.

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')) 

Tôi làm như thế nào? Trong ví dụ của tôi, tôi không có db.relationship cho bank_currency_identification, nó là chính xác?

+0

Bạn có khóa ngoại. Bạn không cần mối quan hệ, ít nhất tôi không hiểu tại sao. Tại sao bạn đang cố gắng để làm cho nó một mối quan hệ nhiều đến nhiều? Nếu bạn cần nó nhiều đến nhiều, bạn có thể tạo một bảng khác như 'currency_many' – adarsh

Trả lời

2

Vì vậy, nếu tôi hiểu chính xác câu hỏi của bạn, bạn muốn tham khảo bảng currencies_many từ bảng orders của bạn. Nếu vậy, bạn có chính xác trong việc có một mối quan hệ khóa nước ngoài với bảng currencies_many.

Tuy nhiên, xuống đường bạn có thể gặp rắc rối khi bạn muốn truy vấn orders từ bảng banks của mình. Tôi sẽ đề nghị, mặc dù nó có vẻ dư thừa, để tạo mối quan hệ một-nhiều giữa OrderBank cũng như giữa OrderCurrency.

bank_id = db.Column(db.Integer, db.ForeignKey('bank.id')) 
currency_id = db.Column(db.Integer, db.ForeignKey('currency.id')) 

Và sau đó trong lớp Bank

orders = db.relationship('Order', backref='bank') 

này cung cấp cho bạn một giao diện truy vấn nhiều bụi.

bank_orders = bank.orders 

Cũng như làm cho mô hình dữ liệu của bạn sạch hơn. Nó sẽ là khó khăn khi phải truy vấn các đơn đặt hàng từ một bảng trung gian mà cũng có tiền tệ. Chỉ cần hai xu của tôi, nhưng có một mô hình dữ liệu dễ hiểu là tốt hơn là tạo ra các mối quan hệ khó xử để tiết kiệm một số dư thừa.

Các vấn đề liên quan