当我尝试使用filter_by()时,烧瓶中返回“TypeError:filter_by()”错误

时间:2016-12-01 10:56:34

标签: forms flask

亲爱的Stack Overflow成员。首先感谢您阅读我的问题。我试图暗示烧瓶的filter_by()函数。我的问题是,当我尝试使用filter进行参数时,我得到了错误:

  

TypeError:filter_by()需要1个位置参数但是2个被赋予

我还附上了我的问题代码。请查看一下。

主要应用程序源代码:

def login():
    error = None
    form = LoginForm(request.form)
    if request.method == 'POST':
        user = User.query.filter_by(Email=request.form['email']).first()
        password = User.query.filter_by(Password=request.form['password']).first()
        group = User.query.filter_by(user).first()

        if user is None or password is None :
            session['logged_in'] = False
            flash('Please write your username password')
        else:
            session['logged_in'] = True
            flash('You were logged in')
            if group=="viewer":
                return redirect(url_for('viewer'))
            elif group=="admin":
                return redirect(url_for('admin'))
            elif group=="employee":
                return redirect(url_for('employee'))
    return render_template('login.html', form=form)

我用于我的应用的模型:

class User(db.Model):
    __tablename__ = 'users'
    Id = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String(64), index=True, unique=True)
    Email = db.Column(db.String(64), index=True, unique=True)
    Password = db.Column(db.String(128), index=True )
    Group = db.Column(db.String(30))
    Tickets = db.relationship('Request', backref='author', lazy='dynamic')

登录页面源代码:

<div class="innter-form">
                        <form class="sa-innate-form" method="post">
                            {{ form.csrf_token }}
                            <label>Email Address</label>
                            <input type="text" name="email" value="{{ request.form.email }}">
                            <label>Password</label>
                            <input type="password" name="password" value="{{ request.form.password }}">
                            <button type="submit" value="submit">Sign In</button>
                            <a href="">Forgot Password?</a>
                        </form>
                    </div>

3 个答案:

答案 0 :(得分:0)

filter_by用于列名

的查询
...
# this returns a user object 
user = User.query.filter_by(Email=request.form['email']).first()
# you should query based on the Id of User
group = User.query.filter_by(Id=user.Id).first()

答案 1 :(得分:0)

可能问题在于

group = User.query.filter_by(user).first()

除了filter_by只接受关键字参数这一事实 - 并且你只提供了一个位置参数,我猜你应该在这里使用与User不同的东西(也许是Group,不确定,因为我不知道你定义了什么模型。

我提到的这行应该看起来像

group = Group.query.filter_by(user=user).first()

答案 2 :(得分:0)

谢谢大家的回复:

如上所述,恐怖组成部分:

group = User.query.filter_by(user).first()

而不是这个代码应该是:

group = User.query.filter_by(Email=user).first()