我想将名称的哈希保存到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从未改变过。我精神焕发但没有改变
答案 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
属性