当前位置:  开发笔记 > 编程语言 > 正文

Flask-Admin/Flask-SQLAlchemy:为INSERT设置user_id = current_user

如何解决《Flask-Admin/Flask-SQLAlchemy:为INSERT设置user_id=current_user》经验,为你挑选了1个好方法。

使用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_userflask.ext.login



1> pjcunningham..:

在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_userflask.ext.login

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有