使用Flask-Admin + Flask-SQLAlchemy我定义了三个模型:User,Apikey,Exchange.
当经过身份验证的用户通过Web管理界面创建新的Apikey时,我希望插入数据库的新行上的user_id设置为登录的当前user_id.
使用我当前的实现,用户可以选择她喜欢的任何用户(这是不希望的).
这是我对模型的定义:
class User(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) first_name = db.Column(db.String(255)) last_name = db.Column(db.String(255)) email = db.Column(db.String(255), unique=True) password = db.Column(db.String(255)) active = db.Column(db.Boolean()) confirmed_at = db.Column(db.DateTime()) roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic')) apikeys = db.relationship('Apikey', backref='user') def __str__(self): return self.email class Apikey(db.Model): id = db.Column(db.Integer, primary_key=True) exch_user = db.Column(db.String(255)) exch_pass = db.Column(db.String(255)) exch_key = db.Column(db.String(255)) exch_secret = db.Column(db.String(255)) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) exch_id = db.Column(db.Integer, db.ForeignKey('exchange.id')) class Exchange(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(255)) apikeys = db.relationship('Apikey', backref='exchange') def __str__(self): return self.name
pjcunningham.. 9
在Apikey模型的管理视图中,您需要做几件事; 隐藏user_id字段并在表单的数据发布到数据库之前手动设置user_id.
假设您也使用Flask-Login或Flask-Security,您的视图类应如下所示:
class ApikeyView(sqla.ModelView): form_excluded_columns = ('user_id') def on_model_change(self, form, model, is_created): if is_created: model.user_id = current_user.id
不要忘了导入current_user
从flask.ext.login
在Apikey模型的管理视图中,您需要做几件事; 隐藏user_id字段并在表单的数据发布到数据库之前手动设置user_id.
假设您也使用Flask-Login或Flask-Security,您的视图类应如下所示:
class ApikeyView(sqla.ModelView): form_excluded_columns = ('user_id') def on_model_change(self, form, model, is_created): if is_created: model.user_id = current_user.id
不要忘了导入current_user
从flask.ext.login