python - 关联对象处理、将子项附加到父项、隐藏 “middle” 表的使用

标签 python flask sqlalchemy many-to-many flask-admin

我正在寻找创建 ModelView 的便捷方法,用于在创建模型 View 时将多个子项附加到父项。 例如,我有模型:

class Order(db.Model):
    __tablename__ = 'order'
    id = db.Column(db.Integer, primary_key=True)
    things = db.relationship('OrderList', back_populates='order', lazy='dynamic')

class OrderList(db.Model):
    __tablename__ = 'order_list'
    order_id = db.Column(db.Integer, db.ForeignKey('order.id'), primary_key=True)
    thing_id = db.Column(db.Integer, db.ForeignKey('things.id'), primary_key=True)
    amount = db.Column(db.Numeric(precision=10, scale=3))
    order = db.relationship('Order', back_populates='things', lazy='joined')
    thing = db.relationship('Thing', back_populates='orders', lazy='joined')

class Thing(db.Model):
    __tablename__ = 'things'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))
    orders = db.relationship('OrderList', back_populates='thing', lazy='dynamic')
    stock = db.Column(db.Numeric(precision=10, scale=3))
    price = db.Column(db.Numeric(precision=10, scale=3))

只需将该模型添加到 Flask-admin,我就有机会将 OrderList 实例附加到 Thing 或 Order:

enter image description here enter image description here 但是如何在不访问中间 OrderList 对象的情况下将子项附加到父项呢?就像使用一对多关系一样。

表格方案:

enter image description here

最佳答案

据我了解,您想要在 OrderThing 上定义多对多关系。

我认为您应该声明这样的多对多关系,而不是声明 OrderList

  1. Many to Many

  2. Adding Removing in MtM

通过这种方式,您可以创建 OrderThing 的实例,并将它们相互添加以创建多对多关系。

编辑

您可以使用Association Proxy完成工作。

您需要将以下构造函数添加到您的OrderList 类

def __init__(self,amount, order, thing):
    self.amount = amount
    self.order = order
    self.thing = thing

除此之外,您还必须定义关联代理,如链接中所示。这应该可以完成你的工作。

关于python - 关联对象处理、将子项附加到父项、隐藏 “middle” 表的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37471873/

相关文章:

python - 如何将列的所有值更改为唯一整数?

python - 获取按钮名称作为输入

python - Html 找不到 flask url

python-3.x - Flask-SQLAlchemy:自动过滤 'deleted' 条目

sqlalchemy - 如何使用 SQLAlchemy 多对多关系实例化 wtforms.ext.sqlalchemy.fields.QuerySelectMultipleField

python - 如果条件不那么困惑

python - 从程序运行 python 调试 session ,而不是从控制台

python - 使用 PyMC 的鲁棒非线性回归(2)

python - Flask ImportError 导致 500 错误,适用于本地

Python/SQLalchemy - 如何触发查询?