【问题标题】:Flask-Admin: Inserting data in two tables at onceFlask-Admin:一次在两个表中插入数据
【发布时间】:2014-08-07 12:06:26
【问题描述】:

这是我使用 flask/flask-admin 的第一个项目。我们有一个使用烧瓶创建的 API,现在正在处理它的管理界面。其中一个要求是在 TableA 中创建记录时,需要在 TableB 中创建许多相关记录,其中包括新 TableA 条目的 ROW_ID。

我已经创建了一个表格,用于将数据输入到 TableA(工作正常),但不知道如何自动将数据添加到 TableB。数据提交到表后是否返回新的(TableA)ROW_ID?有没有更好的方法来做到这一点?

有什么想法吗?

【问题讨论】:

    标签: python flask flask-sqlalchemy flask-admin


    【解决方案1】:

    文档没有很好的示例,但您可以覆盖模型的所有 CRUD 操作,包括创建。您可以自己处理创建和保存模型,您拥有主键,并且可以进行任何其他查询并创建您需要的任何其他模型。

    我是从我们的代码中拼凑出来的,所以希望它足够完整。让我知道它是否令人困惑,或者它不能回答您的问题。

    http://flask-admin.readthedocs.org/en/latest/quickstart/#model-views

    from your_models import Employee, Manatee
    
    from flask.ext.admin import Admin
    from flask.ext.admin.contrib.sqla import ModelView
    
    
    class EmployeeAdminView(ModelView):
    
      # this is called when a model is created
      def create_model(self, form):
        person = Employee() # create new Employee
        form.populate_obj(person)  # use WTForms to populate the model
    
        # create a new manatee for this new employee
        # everybody needs a manatee for business purposes
        # this assumes there's a sqlalchemy relationship() between the two models
    
        manatee = Manatee() 
        manatee.name = "Janet"
    
        person.manatee = manatee 
    
        self.session.add(person)
        self.session.commit()
    
        # at this point person.id should be available, so you can use that here
        # to make any other queries you need to
    
        return True
    
    admin = Admin(app)
    admin.add_view(EmployeeAdminView(Employee, db.session)) 
    

    【讨论】:

    • 谢谢Rachel,我实际上找到了“after_model_change(self, form, model, is_created)”这个方法,它更适合我们的需要,但由于理论相同,我接受了这个作为正确答案。
    • 太棒了,很高兴你找到了你需要的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    相关资源
    最近更新 更多