【问题标题】:Saving related model instance from model method with Flask AppBuilder and SQLAlchemy使用 Flask AppBuilder 和 SQLAlchemy 从模型方法中保存相关模型实例
【发布时间】:2016-05-31 03:00:17
【问题描述】:

在 Flask AppBuilder 中,对于我的一个模型(父)视图,我有一个 post_add 方法,该方法会触发该模型实例的方法:

def post_add(self, item):
    item.create_children()

顾名思义,我想通过该方法创建孩子。来自 Django,我习惯于让我的模型变胖(将一些逻辑放入模型中)。但是,虽然我知道如何在内存中为 Child 模型实例化一个新对象,但我对如何保存它感到困惑。我无法掌握当前的数据库会话来添加()孩子,我想知道我这样做的方式在 Flask AppBuilder 中是否有意义。这是我在 Parent 模型类中的 create_children 方法定义:

def create_children(self):
    for i in range(self.num_children):
        c = Child(some_prop=self.prop)
        c.parent = self
        # And here I'm lost as to how to save each children.
        get_session().add(c)
        get_session().commit()

当然 get_session() 在这里不起作用,因为我的模块中没有定义 get_session。我基本上有两个问题,这是继续使用 Flask AppBuilder 的正确方法吗?我应该将此代码移回views.py吗?在哪里定义了这个方法,我如何去保存我创建的新孩子?我怀疑有一个辅助方法/功能,但我无法从文档中找到它。

谢谢,

【问题讨论】:

  • 看起来我可以使用 dm = SQLAInterface(Child) 然后使用 dm.add(c),但看起来我应该从 Flask AppBuilder 中的 views.py 而不是 models.py 执行此操作而是。
  • 你能做到吗?我有一个类似的用例,尽管我不想创建子记录,而是想将过滤后的模型实例转储到文件中。我将看看 SQLAInterface,因为它看起来确实可以在视图中自定义操作。

标签: python flask flask-sqlalchemy flask-appbuilder


【解决方案1】:

在您拥有的文档上:https://flask-appbuilder.readthedocs.io/en/latest/api.html#flask.ext.appbuilder.base.AppBuilder.get_session

所以你可以得到这样的 SQLAlchemy 会话(在你看来):

self.appbuilder.get_session

【讨论】:

    猜你喜欢
    • 2018-07-13
    • 1970-01-01
    • 2014-09-26
    • 2019-01-21
    • 2021-11-25
    • 2018-03-21
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多