假设我正在创建一个客户可以订购小部件的系统。每个客户可以订购许多小部件,并且每个小部件可能由许多客户订购,因此我需要一个链接表来存储订单(其中一些附加信息,如数量,也可以存储)。
到目前为止,我已经提出了以下实施方案:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Order(db.Model):
customer_id = db.Column(db.ForeignKey("customer.id"), primary_key=True)
widget_id = db.Column(db.ForeignKey("widget.id"), primary_key=True)
customer = db.relationship("Customer", back_populates="orders")
widget = db.relationship("Widget", back_populates="orders")
quantity = db.Column(db.Integer)
class Customer(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
orders = db.relationship("Order", back_populates="customer",
cascade="all, delete-orphan", lazy="dynamic")
class Widget(db.Model):
id = db.Column(db.Integer, primary_key=True)
description = db.Column(db.Text)
orders = db.relationship("Order", back_populates="widget",
cascade="all, delete-orphan", lazy="dynamic")
这是对的吗?特别是,我需要customer
上的widget
和Order
属性,还是可以使用backref
执行某些操作? (如果是这样,使用back_populates
优于backref
还是反之亦然?)