Flask-admin : 如何在编辑table1时自动更新table2中的数据?

问题描述 投票:0回答:0

我正在使用 flask-admin 并使用 baseView 显示一些自定义表单,一旦输入并提交数据,它就会存储在数据库的表中。现在我希望它在对名为 1 的表进行编辑时更新所有表中的数据。我尝试使用 on_model_change() 函数,但它仍然不起作用。甚至 after_model_change() 函数也不起作用。有什么解决办法吗?

这是我的桌子或模型: 表 1:

class Test1(db.Model):
    Test_id = db.Column(
        db.Integer, primary_key=True, autoincrement=True)
    Test_name = db.Column(db.String(500), nullable=True)

表2:

class test_details(db.Model):
    details_id = db.Column(
        db.Integer, primary_key=True, autoincrement=True)
    invoice_id = db.Column(db.Integer, nullable=True)
    test_name = db.Column(db.String(200), nullable=True)
    amount = db.Column(db.Integer, nullable=True)
    created_by = db.Column(db.String(100), nullable=True)
    created_date = db.Column(db.DateTime(timezone=True),
                             default=datetime.utcnow, nullable=True)

    def __str__(self):
        return self.invoice_id

这是我的表单自定义视图:

class testUserView(BaseView):

    def is_accessible(self):
        if not current_user.is_active or not current_user.is_authenticated:
            return False
        if current_user.has_role('superuser') or current_user.has_role('user'):
            return True
        return False
    
    def after_model_change(self, form, model, is_created):
        print("after_model_change called")
        if is_created:
            print("Hey, new record created with values:")

    @expose('/', methods=['GET', 'POST'])
    def index(self):
        if request.method == 'POST':
            data = request.form
            # print(data)
            generate_id(data)
            return jsonify({'success': True})
        # return self.render('admin/usertest.html')
        speciesData = get_species_table_data()
        specimenData = get_specimen_table_data()
        locationData = get_location_table_data()
        clinicalTestData = get_clinicalTest_table_data()
        clinicalTestDatas = json.dumps(clinicalTestData)
        return self.render('admin/usertest.html', speciesData=speciesData, specimenData=specimenData, locationData=locationData, clinicalTestData=clinicalTestDatas, admin_base_template=admin.base_template)

管理员添加视图:

admin.add_view(testUserView(name="Create Order",
               endpoint='usertest', category='Manage Orders'))

我尝试使用 on_model_change() 和 after_model_change() 函数作为 flask-admin 的事件处理程序。我希望它打印“after_model_change called”,但控制台上未显示文本,这意味着未调用该函数。我怎样才能解决这个问题 ?请帮助

flask flask-sqlalchemy flask-admin
© www.soinside.com 2019 - 2024. All rights reserved.