使用Flask AppBuilder和SQLAlchemy从模型方法保存相关的模型实例

时间:2016-02-18 18:53:31

标签: python flask flask-sqlalchemy flask-appbuilder

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

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

如名称所示,从该方法我想创建子项。来自Django我习惯于让我的模型变胖(在模型中加入一些逻辑)。但是虽然我知道如何在内存中为Child模型实例化一个新对象,但我对如何保存它感到困惑。我无法得到当前的db会话来添加()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吗?无论在何处定义此方法,我如何保存我创建的新孩子?我怀疑有一个辅助方法/功能,但我无法从文档中找到它。

谢谢,

1 个答案:

答案 0 :(得分:0)

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

所以你可以像这样(在你的视图上)获得SQLAlchemy会话:

self.appbuilder.get_session