【问题标题】:AttributeError: 'SelectQuery' object has no attribute 'is_active'AttributeError:“SelectQuery”对象没有属性“is_active”
【发布时间】:2014-02-04 01:37:12
【问题描述】:

我正在尝试通过关注Flask Mega Tutorial 来学习 Peewee ORM 与 Flask 的结合。在part 5 of the tutorial 中,我使用 OpenID 创建了一个登录。在克服了许多障碍之后,我现在在下面粘贴的函数中得到了一个 AttributeError:login_user(user, remember = remember_me)

@oid.after_login
def after_login(resp):
    if resp.email is None or resp.email == "":
        flash('Invalid login. Please try again.')
        return redirect(url_for('login'))
    user = User.select().where(User.email == resp.email)    
    if user.wrapped_count() == 0:
        nickname = resp.nickname
        if nickname is None or nickname == "":
            nickname = resp.email.split('@')[0]
        user = User(nickname = nickname, email = resp.email, role = models.ROLE_USER)
        user.save()
    remember_me = False
    if 'remember_me' in session:
        remember_me = session['remember_me']
        session.pop('remember_me', None)
    login_user(user, remember = remember_me)
    return redirect(request.args.get('next') or url_for('index'))

is_active 在我的用户模型中找到如下:

class User(db.Model):
    nickname = TextField()
    email = TextField()
    role = IntegerField(default = ROLE_USER)

    def is_authenticated(self):
        return True

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def get_id(self):
        return self.id

    def __repr__(self):
        return '<User %r>' % (self.nickname)

我不知道我在这里做错了什么。有人可以帮我解决我在这里做错的事情吗?

欢迎所有提示!

【问题讨论】:

    标签: python flask attributeerror peewee flask-peewee


    【解决方案1】:

    正如错误提示的那样,user = User.select().where(User.email == resp.email) 会返回一个SelectQuery,而不是User 的实例。您需要包含一个额外的方法调用来实际获取记录,例如.first()first 将返回 UserNone 的实例。

    这将允许您稍微调整您的代码:

    user = User.select().where(User.email == resp.email).first()
    if not user:  # or if user is None:
        nickname = resp.nickname
        ...
    

    【讨论】:

    • 太棒了!谢谢一百万!
    • 我是peewee的新手,但我认为目前first()的等价物是get()
    猜你喜欢
    • 2016-07-22
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    • 2012-12-01
    • 2021-04-19
    相关资源
    最近更新 更多