Flask-admin: как изменить внешний ключ и обновить связанные записи

У меня есть две таблицы с отношениями внешнего ключа, и я использую flask-admin в качестве графического интерфейса администратора.

В некоторых случаях мне нужно изменить внешний ключ. В этом случае все существующие записи связанной таблицы должны быть обновлены (с новым внешним ключом). Как бы вы реализовали этот функционал?

Я попробовал функцию on_model_change flask-admin. Хотя я столкнулся с проблемой, что я получаю обновленный ключ только из функции (?) -> (Мне нужен старый ключ, чтобы найти существующие записи оценок и обновить их). Кроме того, я не могу зафиксировать новый ключ, пока не будут обновлены записи оценки (ограничение внешнего ключа не будет выполнено).

Могу ли я реализовать эту функциональность в графическом интерфейсе flask-admin?

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

Любая помощь высоко ценится. Спасибо


person Simon    schedule 21.12.2018    source источник


Ответы (1)


Используйте боковые каскады базы данных:

class Assessment(db.Model):
    ...
    psr_id = db.Column(db.String(40), db.ForeignKey("psr_object_table.psr_id",
                                                    onupdate="CASCADE"))
person Ilja Everilä    schedule 21.12.2018