【问题标题】:Flask-Admin deleting secondary mapping on updateFlask-Admin 在更新时删除辅助映射
【发布时间】:2014-01-02 03:32:04
【问题描述】:

我正在使用 Flask-Admin,当我更新我的内容对象时,它会删除其关联查找表 (content_products_table) 中的所有项目。

因此,如果我在其查找表 (content_products_table) 中映射了一个内容对象和 7 个产品,则从内容到产品的所有映射在更新时都会被删除。

我相信这是因为我的产品列表在更新时是空的,但实际上我的产品列表可能有 1000 项长,所以我不想在更新之前加载它,只是根本不更新它。我觉得有一种方法可以配置 Flask-Admin 或 sqlalchemy 以在更新时忽略该字段。

下面是我的对象示例:

content_products_table = db.Table('content_products', db.Model.metadata,
                       db.Column('content_id', db.Integer, db.ForeignKey('content.id')),
                       db.Column('product_id', db.Integer, db.ForeignKey('product.id'))
                       )

class Content(db.Model):
    id = db.Column(db.Integer, primary_key=True)

    products = db.relationship('Product', secondary=content_products_table)

更新我的对象的代码示例:

form.populate_obj(model)
self._on_model_change(form, model, False)
self.session.commit()

任何信息都会有所帮助,因为我是这两个平台的新手。谢谢!

编辑

我想更新,当我的对象更新时,它会删除所有关系。因此,如果我有一个表用户对表内容具有一对多。当我更新用户时,内容表中的 user_id 将设置为 null。

【问题讨论】:

    标签: python sqlalchemy flask flask-admin


    【解决方案1】:

    form_excluded_columns = ('产品')

    需要明确排除对象属性。这似乎非常危险。

    【讨论】:

    • 这很奇怪。 Flask-Admin 在模型上调用 SQLAlchemy delete 方法,然后 SQLAlchemy 进行删除。它没有做任何额外的事情。因此,如果相关模型被删除,那么您以这种方式配置关系并且 SQLAlchemy 正在清理所有内容。显示或隐藏列不会有任何区别。
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2021-08-28
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多