2015-12-16 1 views
0

Я хочу сохранить хэш имени в столбец hash_name. Также я использую Flask-Admin для управления моими данными.Как установить хэш столбца в другом столбце в 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)) 

Также я установил по умолчанию с UUID пакет для hash_name но эта страница в результате была проблема .my UUID никогда не изменял. Я обновилась, но не изменил

ответ

1

Если вы используете только колбовую админ 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's event.

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