Search code examples
pythonflaskflask-sqlalchemyflask-admin

How to set hash of a column in another column in flask-admin?


I want to save hash of name to hash_name column Also I use Flask-Admin to manage my data.

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))

Also I set default with uuid package for hash_name but this page in result had a problem .my uuid never changed . I refreshed but not changed


Solution

  • If you only use flask-admin's SQLAlchemy ModelViews for editing, then it's possible to do following:

    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)
    

    Otherwise use @mehdy's event approach.