如何在flask-admin中的另一列中设置列的哈希值?

时间:2015-12-16 20:04:59

标签: python flask flask-sqlalchemy flask-admin

我想将名称的哈希保存到hash_name列另外我使用Flask-Admin来管理我的数据。

class User(db.Model):
    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.Unicode, unique=True, nullable=False)
    hash_name = db.Column(db.Unicode, unique=True)

admin.add_view(ModelView(User, db.session))

另外我为hash_name设置默认的uuid包,但结果中的这个页面有问题。我的uuid从未改变过。我精神焕发但没有改变

2 个答案:

答案 0 :(得分:1)

如果您只使用flask-admin的SQLAlchemy ModelViews进行编辑,那么可以执行以下操作:

class UserView(sqla.ModelView):
    # Hide `hash_name` in list and form views
    column_exclude_list = ('hash_name',)
    form_excluded_columns = ('hash_name',)

    # Generate new hash on `name` change
    def on_model_change(self, form, model, is_created):
        if len(model.name):
            model.hash_name = generate_hash_name(model.name)

否则请使用@mehdy' event方法。

答案 1 :(得分:0)

我认为你可以使用sqlalchemy的偶数监听器来操作你的对象,然后再将它提交到数据库:

from sqlalchemy import event
...
@event.listens_for(User, "before_commit")
def gen_default(mapper, connection, instance):
    instance.hash_name = hash_function(instance.name)

所以在每次提交之前,都会调用它并使用hash_name

上的正确哈希值更新name属性