gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:32:42 25 4
gpt4 key购买 nike

我正在寻找创建 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com