Flask-admin: как изменить внешний ключ и обновить связанные записи - PullRequest
0 голосов
/ 21 декабря 2018

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

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

Я попробовал функцию 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

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

1 Ответ

0 голосов
/ 21 декабря 2018

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

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