使用分页时如何更新值?

时间:2019-07-28 11:17:26

标签: flask pagination sqlalchemy flask-sqlalchemy

每次使用views对象检索帖子时,如何增加Pagination的值?例如,以下代码将生成TypeError: 'Pagination' object is not iterable

@app.route('/myview/<int:page>')
def view(page=1):
    per_page = 10
    posts = Posts.query.order_by(Posts.time.desc()).paginate(page, per_page, error_out=False)
    for post in posts:
        post.views += 1
    db.session.commit()
    return render_template('view.html',posts=posts)

2 个答案:

答案 0 :(得分:0)

据我了解,发生了两件事:

  1. 对象帖子的分页
  2. 在检索到的每一行上保存新信息

第1部分:分页是paginate返回的类,迭代元素的方法是通过items。这就是为什么尝试遍历TypeError类时得到Pagination的原因。您可以在docsthis answer

上看到更多内容

正确的迭代方法是:

for post in posts.items:
    # your code

第2部分:如果要在迭代对象时更新对象,则还需要添加并提交。我不确定在循环时实际上是否可以更新对象,但是可以尝试:

session = db.session

for post in posts.items:
    post.views += 1
    session.add(post)

session.commit()
return render_template('view.html',posts=posts) 

如果不起作用,您可以将ID附加到列表中并在末尾全部更新,也可以使用其他会话在循环内进行查询和更新。

posts_rendered = []
for post in posts.items:
    posts_rendered.append(post.id)

session.query(Posts).filter(Posts.id.in_(posts_rendered))\
    .update({Posts.views: Posts.views + 1})
session.commit()

here

对更新有很好的回应

答案 1 :(得分:0)

您不能迭代directly分页对象-

您必须迭代项目-

If (lblnews.Left + lblnews.Width) <= 0 Then
    lblnews.Left = 0

Else
    lblnews.Caption = "WELCOME TO MY APPLICATION"

End If

lblnews.Left = lblnews.Left - 25