Flask-admin:如何更改外键并更新相关记录

时间:2018-12-21 17:38:00

标签: python flask sqlalchemy foreign-keys flask-admin

我有两个具有外键关系的表,并且我使用flask-admin作为管理GUI。

在某些情况下,我需要修改外键。在这种情况下,应更新相关表的所有现有记录(使用新的外键)。您将如何实现此功能?

我尝试了flask-admin的on_model_change函数。尽管我遇到了问题,但是我只能从function(?)->获取更新的键(我需要旧键才能找到现有的评估记录并进行更新)。另外,除非评估记录已更新(无法满足外键约束),否则我无法提交新密钥。

我可以在flask-admin GUI中实现此功能吗?

class Assessment(db.Model):
__tablename__ = "assesment_table"
id = db.Column(db.Integer, primary_key=True)
psr_id = db.Column(db.String(40), db.ForeignKey("psr_object_table.psr_id"))

class Unit(db.Model):
__tablename__ = "units_table"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80))
psr_id = db.Column(db.String(40), unique=True)


#needed for Flask-Admin view 
class UnitView(ModelView):
    def on_model_change(self, form, model, is_created):
        #get old_key
        #query and update db with new foreign key
        #commit everything

我们非常感谢您的帮助。谢谢

1 个答案:

答案 0 :(得分:1)

使用数据库级联:

class Assessment(db.Model):
    ...
    psr_id = db.Column(db.String(40), db.ForeignKey("psr_object_table.psr_id",
                                                    onupdate="CASCADE"))