【问题标题】:I am getting "AttributeError: 'int' object has no attribute 'filter'我得到“AttributeError:'int'对象没有属性'filter'
【发布时间】:2020-06-08 02:24:01
【问题描述】:

我希望它能够过滤当前用户的帖子并将其删除。有人告诉我使用 .WHERE 而不是 .FILTER 但它们都不起作用,我得到一个属性错误。我怎样才能得到这个工作?

顺便说一句,我可以只用db.session.query(Post).delete() 删除所有用户帖子,但我想要它,所以它只删除 CURRENT_USER.ID(当前登录到我的会话的用户)的帖子

我添加了我当前的模型:

@login_required
def delete_all_post():
    if current_user.is_authenticated:
        db.session.query(Post).delete().filter(Post.user_id == current_user.id)
        db.session.commit()
        flash('All of your posts has been deleted!', 'success')
        return redirect(url_for('main.home'))```

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Post('{self.title}', {self.date_posted}')"

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(16), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)

【问题讨论】:

  • 你能粘贴整个错误信息吗?

标签: python python-3.x flask sqlalchemy flask-sqlalchemy


【解决方案1】:

delete() 返回 True/False,即 0 或 1,即 int,因此您无法对其进行过滤

尝试: db.session.query(Post).filter(Post.user_id == current_user.id).delete()

【讨论】:

  • Query.delete() 返回匹配给定过滤器的行数(由数据库报告),而不是“真/假”。
猜你喜欢
  • 2020-05-31
  • 2021-11-30
  • 2020-03-26
  • 2013-04-15
  • 2021-01-18
  • 2019-05-30
  • 2021-02-24
  • 2021-08-01
  • 2015-07-06
相关资源
最近更新 更多